Portable data storage services for app.nit.
May not pass the mnit_simple test before mergin the Intent PR #644.
Closes #559
Pull-Request: #662
Reviewed-by: Lucas Bajolet <r4pass@hotmail.com>
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Romain Chanoir <chanoir.romain@courrier.uqam.ca>
Reviewed-by: Frédéric Vachon <fredvac@gmail.com>
@echo '***************************************************************'
@echo '* Generate doc for NIT standard library *'
@echo '***************************************************************'
- bin/nitdoc $$(bin/nitls lib -r --path) -d doc/stdlib \
+ bin/nitdoc $$(bin/nitls lib -rs --path) -d doc/stdlib \
--custom-title "Nit Standard Library" \
--custom-brand "<a href=\"http://nitlanguage.org/\">Nitlanguage.org</a>" \
--custom-overview-text "<p>Documentation for the standard library of Nit<br/>Version $$(git describe)<br/>Date: $$(git show --format="%cd" | head -1)</p>" \
--piwik-tracker "pratchett.info.uqam.ca/piwik/" \
--piwik-site-id "2" \
-doc/nitc/index.html: bin/nitdoc
- bin/nitdoc $$(bin/nitls lib -r --path) src/nit*.nit src/test_*.nit -d doc/nitc \
+doc/nitc/index.html: bin/nitdoc bin/nitls
+ bin/nitdoc $$(bin/nitls lib -rs --path) src/nit*.nit src/test_*.nit -d doc/nitc \
--private \
--custom-title "Nit Compilers and Tools" \
--custom-brand "<a href=\"http://nitlanguage.org/\">Nitlanguage.org</a>" \
--- /dev/null
+src/benitlux_serial.nit
+*.db
+*.email
--- /dev/null
+all: server
+
+server:
+ mkdir -p bin/
+ ../../bin/nitg --dir bin/ src/benitlux_daily.nit src/benitlux_web.nit
+
+src/benitlux_serial.nit:
+ ../../bin/nitserial -o $@ src/benitlux_web.nit
--- /dev/null
+Benitlux is an unofficial mailing list to keep faithful bargoers informed of the current beer offer at the excellent Brasserie Bénélux <http://brasseriebenelux.com/>.
+
+This project is composed of two softwares:
+
+* a Web interface to subscribe and unsubscribe,
+* and a daily background program which updates the BD and send emails.
+
+The web interface is currently published at <http://benitlux.xymus.net/>
+
+# Compile and execute
+
+Make sure all the required packages are installed. Under Debian or Ubuntu, you can use: `apt-get install libevent-dev libsqlite3-dev libcurl4-gnutls-dev sendmail`
+
+To compile, run: `make`
+
+To launch the daily background program, run: `bin/benitlux_daily` (the argument `-e` activates sending emails)
+
+To launch the Web interface, run: `bin/benitlux_web`
+
+The Web interface will be accessible at <http://localhost:8080/>
+
+# Features and TODO
+
+- [x] Web page parser
+- [x] Daily mailer
+- [x] Web interface
+- [x] Serialization and deserialization of data classes
+- [ ] Android app
+- [ ] iOS app
+- [ ] Charlevoix location support
+- [ ] Customize mails (daily, on change, per locations)
+- [ ] Authenticate unsubscribe actions over GET
+- [ ] Social network and location updates
+- [ ] Event updates
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Actions for the Web interface of Benitlux
+module benitlux_controller
+
+import nitcorn
+import json_serialization
+
+import benitlux_model
+import benitlux_db
+import benitlux_view
+
+abstract class BenitluxAction
+ super Action
+
+ # Path to the database
+ var db_path = "benitlux_sherbrooke.db"
+
+ # Path to the storage of the last email sent
+ var sample_email_path = "benitlux_sherbrooke.email"
+end
+
+# Web interface to subscribe to the mailing list
+class BenitluxSubscriptionAction
+ super BenitluxAction
+
+ redef fun answer(request, turi)
+ do
+ var template = new BenitluxDocument
+
+ var sub = request.post_args.keys.has("sub")
+ var unsub = request.all_args.keys.has("unsub")
+
+ var email = null
+ if request.all_args.keys.has("email") then email = request.all_args["email"].trim
+
+ if email != null then
+ if email.is_empty or not email.chars.has('@') or not email.chars.has('.') then
+ template.message_level = "danger"
+ template.message_content = "Invalid email."
+ else if sub and request.post_args.keys.has("email") then
+ template.message_level = "success"
+ template.message_content = "Subscription successful!"
+
+ var db = new DB.open(db_path)
+ db.subscribe email
+ db.close
+ else if unsub then
+ template.message_level = "warning"
+ template.message_content = "You've been unsubscribed."
+
+ var db = new DB.open(db_path)
+ db.unsubscribe email
+ db.close
+ end
+ end
+
+ if sample_email_path.file_exists then
+ var f = new IFStream.open(sample_email_path)
+ var lines = new Array[String]
+ for line in f.read_all.split_with("\n") do if not line.is_empty then lines.add line
+ f.close
+ template.sample_email_lines = lines
+ end
+
+ var response = new HttpResponse(200)
+ response.body = template.write_to_string
+ return response
+ end
+end
+
+# RESTful interface to compare beer offer between given dates
+#
+# Expects request in the format of `since/2014-07-24`, will replay with a
+# `BeerEvents` serialized to Json with the necessary meta-data to be deserialized.
+class BenitluxRESTAction
+ super BenitluxAction
+
+ redef fun answer(request, turi)
+ do
+ var words = turi.split("/")
+ if not words.is_empty and words.first.is_empty then words.shift
+
+ if words.length >= 2 and words[0] == "since" then
+ var since = words[1]
+
+ var db = new DB.open(db_path)
+ var events = db.beer_events_since(since.to_sql_string)
+ db.close
+
+ if events == null then
+ var response = new HttpResponse(400)
+ response.body = "Bad request"
+ return response
+ end
+
+ var stream = new StringOStream
+ var serializer = new JsonSerializer(stream)
+ serializer.serialize events
+ var serialized = stream.to_s
+
+ var response = new HttpResponse(200)
+ response.body = serialized
+ return response
+ end
+
+ var response = new HttpResponse(400)
+ response.body = "Bad request"
+ return response
+ end
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Daily program to fetch and parse the Web site, update the database and email subscribers
+module benitlux_daily
+
+import curl
+import sendmail
+import opts
+
+import benitlux_model
+import benitlux_db
+
+redef class Text
+ # Return a `String` without any HTML tags (such as `<br />`) from `recv`
+ fun strip_tags: String
+ do
+ var str = to_s
+ var new_str = ""
+
+ var from = 0
+ loop
+ var at = str.index_of_from('<', from)
+ if at == -1 then break
+
+ new_str += str.substring(from, at-from)
+
+ at = str.index_of_from('>', at)
+ assert at != -1
+
+ from = at+1
+ end
+
+ return new_str
+ end
+
+ # Return an `Array` of the non-empty lines in `self`
+ #
+ # assert ["a", "asdf", "", " ", " ", "b"].to_clean_lines == ["a", "asdf", "b"]
+ fun to_clean_lines: Array[String]
+ do
+ var orig_lines = split_with("\n")
+ var new_lines = new Array[String]
+
+ for line in orig_lines do
+ line = line.trim
+
+ # remove empty lines
+ if line == " " then continue
+ if line.is_empty then continue
+
+ new_lines.add line.to_s
+ end
+
+ return new_lines
+ end
+end
+
+# Main logic of the program to be executed daily
+class Benitlux
+ # The street on which is the Benelux
+ var street: String
+
+ # The url of this precise Benelux
+ var url: String
+
+ # Path to the database
+ var db_path: String
+
+ # Where to save the sample email
+ var sample_email_path: String
+
+ init(street: String)
+ do
+ self.street = street
+ self.url = "www.brasseriebenelux.com/{street}"
+ self.db_path = "benitlux_{street}.db"
+ self.sample_email_path = "benitlux_{street}.email"
+ end
+
+ # Execute the main program logic
+ fun run(send_emails: Bool)
+ do
+ # Get the web page
+ var body = download_html_page
+
+ # Parse the Web page and get the available beers
+ var beers = parse_beers_from_html(body)
+
+ var db = new DB.open(db_path)
+
+ # Update the database with the beers of the day
+ db.insert_beers_of_the_day beers
+
+ # Query the beer-related events of today
+ var beer_events = db.beer_events_today
+
+ # Generate the email title and content, store them in attributes
+ generate_email(beer_events)
+
+ # Save as sample email to file
+ var f = new OFStream.open(sample_email_path)
+ f.write email_title + "\n"
+ for line in email_content do f.write line + "\n"
+ f.close
+
+ # Set the email if desired
+ if send_emails then
+ var subs = db.subscribers
+ send_emails_to subs
+ end
+
+ db.close
+ end
+
+ # Fetch the Web page at `url`
+ fun download_html_page: String
+ do
+ var curl = new Curl
+
+ var request = new CurlHTTPRequest(url, curl)
+ var response = request.execute
+
+ if response isa CurlResponseSuccess then
+ var body = response.body_str
+ curl.destroy
+ return body
+ else if response isa CurlResponseFailed then
+ print "Failed downloading URL '{url}' with: {response.error_msg} ({response.error_code})"
+ exit 1
+ end
+ abort
+ end
+
+ # Extract the beers of the day information from the HTML if `body`
+ fun parse_beers_from_html(body: String): HashSet[Beer]
+ do
+ # Parts of the HTML page expected to encapsulate the interesting section
+ var header = "<h1>Bières<br /></h1>"
+ var ender = "</div></div></div>"
+
+ var match = body.search(header)
+ assert match != null else print body
+ var start = match.after
+
+ match = body.search_from(ender, start)
+ assert match != null
+ var finish = match.from
+
+ var of_interest = body.substring(start, finish-start)
+ var lines = of_interest.strip_tags.to_clean_lines
+
+ var beers = new HashSet[Beer]
+ for line in lines do
+ var parts = line.split(" - ")
+ if parts.length >= 2 then
+ beers.add new Beer(parts[0].trim, parts[1].trim)
+ end
+ end
+ return beers
+ end
+
+ # Content lines of the email
+ var email_content: Array[String]
+
+ # Title of the email
+ var email_title: String
+
+ # Generate email and fill the attributes `email_content` and `email_title`
+ fun generate_email(beer_events: BeerEvents)
+ do
+ email_title = beer_events.to_email_title
+ email_content = beer_events.to_email_content
+ end
+
+ # Send the email to all the addresses in `subs`
+ fun send_emails_to(subs: Array[String])
+ do
+ for email in subs do
+ var unsub_link = "http://benitlux.xymus.net/?unsub=&email={email}"
+ var content = """
+{{{email_content.join("<br />\n")}}}
+<br /><br />
+To unsubscribe, go to <a href="{{{unsub_link}}}">{{{unsub_link}}}</a>
+"""
+
+ var mail = new Mail("Benitlux <benitlux@xymus.net>", email_title, content)
+ mail.to.add email
+ mail.header["Content-Type"] = "text/html; charset=\"UTF-8\""
+ mail.encrypt_with_base64
+
+ mail.send
+ end
+ end
+end
+
+redef class OptionContext
+ # Shall we mail the mailing list?
+ var send_emails = new OptionBool("Send emails to subscribers", "-e", "--email")
+
+ # Print the usage message
+ var help = new OptionBool("Print this help message", "-h", "--help")
+
+ redef init do add_option(send_emails, help)
+end
+
+# Avoid executing when running tests
+if "NIT_TESTING".environ == "true" then exit 0
+
+var opts = new OptionContext
+opts.parse args
+if not opts.errors.is_empty or opts.help.value == true then
+ print opts.errors.join("\n")
+ print "Usage: benitlux_daily [Options]"
+ opts.usage
+ exit 1
+end
+
+var ben = new Benitlux("sherbrooke")
+ben.run(opts.send_emails.value or else false)
+
+# The parsing logic for the wellington locaiton is active (to gather data)
+# but the web interface do not allow to subscribe to its mailing list.
+#
+# TODO revamp mailing list Web interface
+ben = new Benitlux("wellington")
+ben.run(opts.send_emails.value or else false)
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Database interface to be used by the Web server and daily program
+module benitlux_db
+
+import sqlite3
+
+import benitlux_model
+
+# The database of this project
+class DB
+ super Sqlite3DB
+
+ redef init open(path)
+ do
+ super
+
+ create_tables
+ end
+
+ # Create all tables for this project (IF NOT EXISTS)
+ fun create_tables
+ do
+ assert create_table("IF NOT EXISTS beers (name TEXT PRIMARY KEY, desc TEXT)") else
+ print error or else "?"
+ end
+
+ assert create_table("IF NOT EXISTS daily (beer INTEGER, day DATE)") else
+ print error or else "?"
+ end
+
+ assert create_table("IF NOT EXISTS subscribers (email TEXT UNIQUE PRIMARY KEY, joined DATETIME DEFAULT CURRENT_TIMESTAMP)") else
+ print error or else "?"
+ end
+ end
+
+ # Update the DB with a all the `beers` available today
+ #
+ # Delete any other previous information for today.
+ fun insert_beers_of_the_day(beers: HashSet[Beer])
+ do
+ # Clean the DB of the previous beers of the day
+ assert execute("DELETE FROM daily WHERE day == date('now')") else
+ print error or else "?"
+ end
+
+ # Add beer info
+ for beer in beers do
+ # Add meta if not there
+ assert execute("INSERT OR IGNORE INTO beers (name, desc) VALUES ({beer.name.to_sql_string}, {beer.desc.to_sql_string})") else
+ print error or else "?"
+ end
+
+ # Add day
+ assert execute("INSERT INTO daily (beer, day) VALUES (" +
+ "(SELECT min(ROWID) FROM beers WHERE lower(name) = lower({beer.name.to_sql_string})), " +
+ "date('now'))") else
+ print error or else "?"
+ end
+ end
+ end
+
+ # Build and return a `BeerEvents` for today compared to the last weekday
+ fun beer_events_today: BeerEvents
+ do
+ var tm = new Tm.localtime
+ var last_weekday
+ if tm.wday == 1 then
+ # We're monday! we compare with the last friday
+ last_weekday = "date('now', 'weekday 6', '-7 day')"
+ else last_weekday = "date('now', '-1 day')"
+
+ return beer_events_since(last_weekday).as(not null) # This is used by daily
+ end
+
+ # Build and return a `BeerEvents` for today compared to `prev_day`
+ #
+ # Return `null` on error
+ fun beer_events_since(prev_day: String): nullable BeerEvents
+ do
+ var events = new BeerEvents
+
+ # New
+ var stmt = select("name, desc FROM beers WHERE " +
+ "ROWID IN (SELECT beer FROM daily WHERE date(day) = date('now')) AND " +
+ "NOT ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
+ if stmt == null then return null
+ for row in stmt do events.new_beers.add row.to_beer
+
+ # Gone
+ stmt = select("name, desc FROM beers WHERE " +
+ "NOT ROWID IN (SELECT beer FROM daily WHERE date(day) = date('now')) AND " +
+ "ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
+ if stmt == null then return null
+ for row in stmt do events.gone_beers.add row.to_beer
+
+ # Fix
+ stmt = select("name, desc FROM beers WHERE " +
+ "ROWID IN (SELECT beer FROM daily WHERE date(day) = date('now')) AND " +
+ "ROWID IN (SELECT beer FROM daily WHERE date(day) = date({prev_day}))")
+ if stmt == null then return null
+ for row in stmt do events.fix_beers.add row.to_beer
+
+ return events
+ end
+
+ # All the subscribers to the mailing list
+ fun subscribers: Array[String]
+ do
+ var subs = new Array[String]
+ for row in select("email FROM subscribers") do subs.add row[0].to_s
+ return subs
+ end
+
+ # Add `email` to the mailing list subscribers
+ fun subscribe(email: String)
+ do
+ assert insert("OR IGNORE INTO subscribers (email) VALUES (lower({email.to_sql_string}))") else
+ print error or else "?"
+ end
+ end
+
+ # Remove `email` to the mailing list subscribers
+ fun unsubscribe(email: String)
+ do
+ assert execute("DELETE FROM subscribers WHERE email = lower({email.to_sql_string})") else
+ print error or else "?"
+ end
+ end
+end
+
+redef class StatementRow
+ # Convert this BD row to a `Beer`
+ fun to_beer: Beer do return new Beer(self[0].to_s, self[1].to_s)
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Database and data model to be used by servers and clients
+module benitlux_model
+
+import serialization
+
+# A beer, with a name and description
+class Beer
+ auto_serializable
+
+ init(name, desc: String)
+ do
+ self.name = name
+ self.desc = desc
+ end
+
+ # Name of the beer
+ var name: String
+
+ # Description on the Web site
+ var desc: String
+
+ redef fun to_s do return "<{name}: {desc}>"
+end
+
+# A collection of beer-related events
+class BeerEvents
+ auto_serializable
+
+ # New beers on the menu
+ var new_beers = new Array[Beer]
+
+ # Beers that have left the menu
+ var gone_beers = new Array[Beer]
+
+ # Beers that are on the menu today, and yesterday
+ var fix_beers = new Array[Beer]
+
+ # Get a human pretty `Array[String]` version of `self`
+ fun to_email_content: Array[String]
+ do
+ var content = new Array[String]
+
+ # New beers
+ var new_beers_name = new Array[String]
+ for beer in self.new_beers do
+ content.add "+ {beer.name}: {beer.desc}"
+ end
+
+ # Gone beers
+ for beer in self.gone_beers do
+ content.add "- {beer.name}: {beer.desc}"
+ end
+
+ # Fix beers
+ for beer in self.fix_beers do
+ content.add " {beer.name}: {beer.desc}"
+ end
+
+ return content
+ end
+
+ # Get a pretty and short version of `self`
+ fun to_email_title: String
+ do
+ var title = "Benelux Beer Menu"
+
+ # New beers
+ var new_beers_name = new Array[String]
+ for beer in self.new_beers do new_beers_name.add beer.name
+
+ if not new_beers_name.is_empty then
+ title += " (+ {new_beers_name.join(", ")})"
+ end
+
+ return title
+ end
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# View logic of the Web interface Benitlux
+module benitlux_view
+
+import benitlux_model
+import template
+
+# Template for the whole Benitlux page
+class BenitluxDocument
+ super Template
+
+ # Page title
+ var page_title = "Benitlux Mailing List" is writable
+
+ # Page header
+ fun header: Template do return new BenitluxHeader
+
+ # Error or success message content, will be shown in a dismissable panel
+ var message_content: nullable String = null is writable
+
+ # Error or success message level (success/danger/warning/info)
+ var message_level: nullable String = null is writable
+
+ # Lines of the last email sent to subscribers
+ var sample_email_lines: nullable Array[String] = null is writable
+
+ redef fun rendering
+ do
+ add """
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
+ <title>"""
+ add page_title
+ add """</title>
+</head>
+<body>
+ """
+ add header
+ add """
+<div class="container">
+
+<div class="panel panel-default">
+ <div class="panel-body">
+ <p>Service de diffusion des changements au menu de l'excellente
+ <a href="http://www.brasseriebenelux.com/">Brasserie Bénélux</a>
+ sur la rue Sherbrooke. La liste est mise à jours tous les jours à 14h,
+ le courriel est envoyé au même moment.</p>
+ <form class="form-inline text-center" role="form" method="POST">
+ <div class="form-group">
+ <div class="input-group">
+ <div class="input-group-addon">@</div>
+ <input class="form-control" type="email" name="email" placeholder="Enter email">
+ </div>
+ </div>
+ <button type="submit" class="btn btn-default" name="sub">S'inscrire</button>
+ <button type="submit" class="btn btn-default" name="unsub">Se désinscrire</button>
+ </form>
+ </div>
+</div>
+ """
+
+ var message_level = message_level
+ var message_content = message_content
+ if message_level != null and message_content != null then
+ add """
+<div class="alert alert-{{{message_level}}} alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ {{{message_content}}}
+</div>
+ """
+ end
+
+ var sample_email_lines = sample_email_lines
+ if sample_email_lines != null then
+ add """
+<div class="panel panel-default">
+ <div class="panel-heading">Dernier courriel envoyé</div>
+ <ul class="list-group">
+ <li class="list-group-item">
+ {{{sample_email_lines.join("</li><li class=\"list-group-item\">")}}}
+ </li>
+ </ul>
+</div>"""
+ end
+
+ add """
+</div>
+</body>
+</html>"""
+ end
+end
+
+# Template for the header of Benitlux (right after the opening of `<body>`)
+class BenitluxHeader
+ super Template
+
+ redef fun rendering
+ do
+ add """
+<nav class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="http://xymus.net/">Xymus.net</a>
+ </div>
+
+ <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+ <ul class="nav navbar-nav">
+ <li><a href="http://pep8.xymus.net/">Pep/8 Analysis</a></li>
+ <li><a href="http://tnitter.xymus.net/">Tnitter</a></li>
+ <li class="active"><a href="http://benitlux.xymus.net/">Benitlux</a></li>
+ </ul>
+ </div>
+ </div>
+</nav>"""
+ end
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Web server for Benitlux
+module benitlux_web
+
+import benitlux_model
+import benitlux_view
+import benitlux_controller
+
+# Avoid executing when running tests
+if "NIT_TESTING".environ == "true" then exit 0
+
+var iface = "localhost:8080"
+
+var vh = new VirtualHost(iface)
+vh.routes.add new Route("/rest/", new BenitluxRESTAction)
+vh.routes.add new Route(null, new BenitluxSubscriptionAction)
+
+var factory = new HttpFactory.and_libevent
+factory.config.virtual_hosts.add vh
+
+print "Launching server on http://{iface}/"
+factory.run
# Is self transformed to a other production for the AST
# FIXME: cleaup AST
- var spe: nullable Production writable = null
+ var spe: nullable Production = null is writable
# Is self contains only a single alternative (then no need for a abstract production class in the AST)
# FIXME cleanup AST
- var altone writable = false
+ var altone = false is writable
# The cname of the class in the AST
# FIXME: cleanup AST
var prod: Production
# The name of the alternative
- var name: String writable
+ var name: String is writable
# The elements of the alternative
var elems: Array[Element]
end
# The code for the reduction
- var codes: nullable Array[Code] writable = null
+ var codes: nullable Array[Code] = null is writable
# Is the alternative transformed (ie not in the AST)
- var trans writable = false
+ var trans = false is writable
# Is the alternative unparsable? (ie not in the automaton)
- var phony writable = false
+ var phony = false is writable
# Imitialize codes with the elements
fun make_codes
end
end
-redef class String
- # escape string used in labels for graphviz
- fun escape_to_dot: String
- do
- return escape_more_to_c("|\{\}<>")
- end
-end
-
private class Generator
var out = new Array[String]
fun add(s: String) do out.add(s)
class ASTPrinter
super Visitor
- var str writable = ""
+ var str = "" is writable
init do end
redef fun visit(n) do n.accept_ast_printer(self)
end
end
- var watchdog writable = 0
+ var watchdog = 0 is writable
fun link_ret_to_calls(b: BasicBlock, to_link_ori: List[BasicBlock], seq: List[BasicBlock], depth: Int): Bool
do
watchdog += 1
# State of the parser automata as stored in the parser stack.
private class State
# The internal state number
- readable writable var _state: Int
+ readable var _state: Int is writable
# The node stored with the state in the stack
- readable writable var _nodes: nullable Object
+ readable var _nodes: nullable Object is writable
init(state: Int, nodes: nullable Object)
do
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
- <a class="navbar-brand">Pep/8 Analysis</a>
+ <a class="navbar-brand" href="http://xymus.net/">Xymus.net</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
- <li class="active"><a>Web interface</a></li>
- <li><a href="https://github.com/privat/nit/tree/master/contrib/pep8analysis/">Tool source and manual</a></li>
+ <li><a href="http://xymus.net/ens/">Enseignement</a></li>
+ <li class="active"><a href="http://pep8.xymus.net/">Pep/8 Analysis</a></li>
+ <li><a href="http://tnitter.xymus.net/">Tnitter</a></li>
+ <li><a href="http://benitlux.xymus.net/">Benitlux</a></li>
+ <li><a href="http://nitlanguage.org/">Nit</a></li>
</ul>
- <ul class="nav navbar-nav navbar-right">
- <li><a href="http://nitlanguage.org/">nitlanguage.org</a></li>
+
+ <ul class="nav navbar-nav pull-right">
+ <li><a href="https://github.com/privat/nit/tree/master/contrib/pep8analysis/">Source and manual</a></li>
<li><a href="https://code.google.com/p/pep8-1/">Pep/8 project</a></li>
</ul>
</div>
# Post a Tnit!
var text = request.post_args["text"]
db.post(user, text)
+
+ # Redirect the user to avoid double posting
+ var response = new HttpResponse(303)
+ response.header["Location"] = request.uri
+ return response
end
end
# The value indicate the number of step that remain to be stunt
#
# If a animal is stunned, it cannot move horizontally
- var stunt_ttl: Int writable = 0
+ var stunt_ttl: Int = 0 is writable
# Common update for animal
# handle stunt and edge collision
class MovingEntity
super Entity
- var going_to : nullable GamePos writable = null
+ var going_to : nullable GamePos = null is writable
fun speed : Int is abstract
all:
mkdir -p bin/
../../bin/nitg --dir bin src/nitcorn_hello_world.nit src/file_server_on_port_80.nit
+
+xymus.net:
+ mkdir -p bin/
+ ../../bin/nitg --dir bin/ -I ../../contrib/tnitter/src/ -I ../../contrib/benitlux/src/ src/xymus_net.nit
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Configuration of the Web server of xymus.net
+module xymus_net
+
+import nitcorn
+import privileges
+
+# Use actions defined by contribs
+import tnitter
+import benitlux_controller
+
+# Header for the whole site
+class MasterHeader
+ super Template
+
+ # Current page id, is used to set the `active` class on the header tab
+ var page: nullable String
+
+ # Make room for a login or logout placeholder (used by tnitter)
+ var login_placeholder: Bool
+
+ redef fun rendering
+ do
+ var actives = new HashMap[String, String]
+ var page = page
+ if page != null then actives[page] = " class=\"active\""
+
+ add """
+<nav class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="http://xymus.net/">Xymus.net</a>
+ </div>
+
+ <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+ <ul class="nav navbar-nav">
+ <li{{{actives.get_or_default("ens", "")}}}><a href="http://xymus.net/ens/">Enseignement</a></li>
+ <li><a href="http://pep8.xymus.net/">Pep/8 Analysis</a></li>
+ <li{{{actives.get_or_default("tnitter", "")}}}><a href="http://tnitter.xymus.net/">Tnitter</a></li>
+ <li{{{actives.get_or_default("benitlux", "")}}}><a href="http://benitlux.xymus.net/">Benitlux</a></li>
+ <li><a href="http://nitlanguage.org/">Nit</a></li>
+ </ul>
+
+ <ul class="nav navbar-nav pull-right">
+ """
+ if login_placeholder then add "%header_right%"
+
+ add """
+ </ul>
+ </div>
+ </div>
+</nav>"""
+ end
+
+ redef fun to_s do return write_to_string
+end
+
+redef class Tnitter
+ redef var header: String = (new MasterHeader("tnitter", true)).to_s
+end
+
+redef class BenitluxDocument
+ redef var header = new MasterHeader("benitlux", false)
+end
+
+redef class ErrorTemplate
+ redef var header = new MasterHeader(null, false)
+end
+
+# Avoid executing when running tests
+if "NIT_TESTING".environ == "true" then exit 0
+
+# Setup server interfaces
+#
+# Change these to use this config on your own server!
+var default_vh = new VirtualHost("xymus.net:80")
+var vps_vh = new VirtualHost("vps.xymus.net:80")
+var tnitter_vh = new VirtualHost("tnitter.xymus.net:80")
+var pep8_vh = new VirtualHost("pep8.xymus.net:80")
+var benitlux_vh = new VirtualHost("benitlux.xymus.net:80")
+
+var factory = new HttpFactory.and_libevent
+factory.config.virtual_hosts.add default_vh
+factory.config.virtual_hosts.add vps_vh
+factory.config.virtual_hosts.add tnitter_vh
+factory.config.virtual_hosts.add pep8_vh
+factory.config.virtual_hosts.add benitlux_vh
+
+# Ports are open, drop to a low-privileged user if we are root
+var user_group = new UserGroup("nitcorn", "nitcorn")
+if sys.uid == 0 then user_group.drop_privileges
+
+# Tnitter is available at `tnitter.xymus.net` and `xymus.net/tnitter/`
+var tnitter = new Tnitter
+default_vh.routes.add new Route("/tnitter/", tnitter)
+tnitter_vh.routes.add new Route(null, tnitter)
+
+# Pep/8 Analysis is only a file server. It is available at `pep8.xymus.net`
+# and through the global/default file server at `xymus.net/pep8/`
+#
+# TODO Implement pep8analysis server-side with a nitcorn action
+pep8_vh.routes.add new Route(null, new FileServer("/var/www/pep8/"))
+
+# Benitlux is available at `benitlux.xymus.net` and `xymus.net/benitlux/`
+#
+# It has 2 actions/Web interfaces. The Web user UI to subscribe and unsubscribe
+# to the mailing list. And the RESTful interface used by the Android app.
+var benitlux_sub = new BenitluxSubscriptionAction
+var benitlux_rest = new BenitluxRESTAction
+default_vh.routes.add new Route("/benitlux/rest/", benitlux_rest)
+default_vh.routes.add new Route("/benitlux/", benitlux_sub)
+benitlux_vh.routes.add new Route("/rest/", benitlux_rest)
+benitlux_vh.routes.add new Route(null, benitlux_sub)
+
+# We use a special file server for the path `xymus.net/ens` only to display
+# a different header.
+var file_server_ens = new FileServer("/var/www/ens/")
+file_server_ens.header = (new MasterHeader("ens", false))
+default_vh.routes.add new Route("/ens/", file_server_ens)
+
+# Default file server is used for the main page at `xymus.net` and it is
+# the default action for any path not caught by other actions.
+var file_server = new FileServer("/var/www/")
+file_server.header = (new MasterHeader(null, false))
+default_vh.routes.add new Route(null, file_server)
+vps_vh.routes.add new Route(null, file_server)
+
+# Launch server main loop
+factory.run
end
# Current forture of the player
- var money: Int writable = 0
+ var money: Int = 0 is writable
# Number of basic bullets fired together
- var nbshoots: Int writable = 1
+ var nbshoots: Int = 1 is writable
# Time bebore the player shoot again a basic bullet (cooldown)
# Shoot if 0
var shoot_ttl = 0
# Number of missiles
- var nbmissiles: Int writable = 0
+ var nbmissiles: Int = 0 is writable
# Time bebore the player shoot again a missile (cooldown)
# Shoot if 0
super Hitable
# true in on move, false if player is at rest
- var active writable = false
+ var active = false is writable
init do
self.width = 500
super Scene
# When a scene need to be replaced, just assign the next_scene to a non null value
- var next_scene: nullable ShotScene writable = null
+ var next_scene: nullable ShotScene = null is writable
# The width of the whole scene
- var width: Int writable
+ var width: Int is writable
# The height of the whole scene
- var height: Int writable
+ var height: Int is writable
init(w,h: Int)
do
end
end
- var play: Bool writable = false
+ var play: Bool = false is writable
var ttl: Int = 50
redef fun update
class SoundPool
private var nsoundpool: NativeSoundPool is noinit
# The maximum number of simultaneous streams for this SoundPool
- var max_streams writable = 10
+ var max_streams = 10 is writable
# The audio stream type, 3 is STREAM_MUSIC, default for game application
- var stream_type writable = 3
+ var stream_type = 3 is writable
# The sample-rate converter quality, currently has no effect
- var src_quality writable = 0
+ var src_quality = 0 is writable
# Left volume value, range 0.0 to 1.0
- var left_volume writable = 1.0
+ var left_volume = 1.0 is writable
# Right volume value, range 0.0 to 1.0
- var right_volume writable = 1.0
+ var right_volume = 1.0 is writable
# Playback rate, 1.0 = normal playback, range 0.5 to 2.0
- var rate writable = 1.0
+ var rate = 1.0 is writable
# Loop mode, 0 = no loop, -1 = loop forever
- var looping writable = 0
+ var looping = 0 is writable
# Stream priority
private var priority = 1
# NIT representation of an Android Sensor used in android_app to initialize sensors
class AndroidSensor
- var asensor writable = new ASensor
- var enabled writable = false
- var event_rate writable = 100000
+ var asensor = new ASensor is writable
+ var enabled = false is writable
+ var event_rate = 100000 is writable
fun name: String do return asensor.name.to_s
fun vendor: String do return asensor.vendor.to_s
var proximity = new AndroidSensor
var sensormanager: ASensorManager
var eventqueue: ASensorEventQueue
- var sensors_support_enabled writable = false
+ var sensors_support_enabled = false is writable
private fun extern_input_sensor_accelerometer(event: ASensorAccelerometer) do input(event)
private fun extern_input_sensor_magnetic_field(event: ASensorMagneticField) do input(event)
# Game logic on the client
class ThinGame
- var tick: Int protected writable = 0
+ var tick: Int = 0 is protected writable
end
# Game turn on the client
class ThinGameTurn[G: ThinGame]
- var tick: Int protected writable = 0
+ var tick: Int = 0 is protected writable
- var events: List[GameEvent] protected writable = new List[GameEvent]
+ var events: List[GameEvent] = new List[GameEvent] is protected writable
init (t: Int) do tick = t
end
# limitations under the License.
# Offers features to interface with C++ code and libraries
-module cpp
+module cpp is
+ new_annotation cpp_compiler_option
+end
# A pointer to a C++ std::string instance
extern class CppString in "C++" `{ std::string* `}
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Mix of all things cryptography-related
+module crypto
+
+redef class Char
+ # Rotates self of `x`
+ #
+ # NOTE: works on letters only
+ #
+ # assert 'x'.rot(6) == 'd'
+ # assert 'T'.rot(15) == 'I'
+ # assert '1'.rot(10) == '1'
+ # assert '$'.rot(10) == '$'
+ # assert 'z'.rot(-2) == 'x'
+ fun rot(x: Int): Char do
+ if not is_letter then return self
+ x = x % 26
+ if x < 0 then x += 26
+ var up = false
+ var val = ascii
+ if is_upper then
+ up = true
+ val += 32
+ end
+ val += x
+ if val > 122 then val -= 26
+ if up then val -= 32
+ return val.ascii
+ end
+end
+
+redef class String
+ # Performs a Rotation of `x` on each letter of self
+ #
+ # Works by replacing every character in `self` by its
+ # rotated char.
+ #
+ # Say we have a rotation of `3` (Caesar rotation, for
+ # culture) for a string : "aybabtu"
+ #
+ # a, rotated by 3 becomes d
+ # y, rotated by 3 becomes b
+ # b, rotated by 3 becomes e
+ # t, rotated by 3 becomes w
+ # u, rotated by 3 becomes x
+ #
+ # We then replace every letter in our original string by
+ # their rotated representations, therefore yielding : "dbedewx"
+ #
+ # assert "All your base are belong to us".rot(13) == "Nyy lbhe onfr ner orybat gb hf"
+ # assert "This is no moon.".rot(4).rot(22) == "This is no moon."
+ #
+ # NOTE : Works on letters only
+ # NOTE : This cipher is symmetrically decrypted with an `x` of 26-`x`
+ fun rot(x: Int): String do
+ var rot = x % 26
+ if rot < 0 then rot += 26
+ var d = new FlatBuffer.with_capacity(length)
+ var p = 0
+ for i in chars do
+ d.add i.rot(rot)
+ end
+ return d.to_s
+ end
+
+ # Returns a rail-fence cipher from `self` with `depth` rails
+ #
+ # Rail works by drawing a zig-zag pattern on `depth` rails.
+ #
+ # Say we have "fuckingbehemoth".railfence(4)
+ #
+ # This happens in-memory :
+ # f.....g.....o..
+ # .u...n.b...m.t.
+ # ..c.i...e.e...h
+ # ...k.....h.....
+ #
+ # Therefore, yielding the ciphertext : "fgounbmtcieehkh"
+ #
+ # assert "fuckingbehemoth".railfence(4) == "fgounbmtcieehkh"
+ fun railfence(depth: Int): String do
+ var lines = new Array[FlatBuffer].with_capacity(depth)
+ var up = false
+ for i in [0..depth[ do
+ lines[i] = new FlatBuffer.with_capacity(length)
+ end
+ var curr_depth = 0
+ for i in chars do
+ for j in [0..depth[ do
+ if j == curr_depth then
+ lines[j].add i
+ else
+ lines[j].add '.'
+ end
+ end
+ if up then
+ curr_depth -= 1
+ else
+ curr_depth += 1
+ end
+ if curr_depth == 0 then
+ up = false
+ end
+ if curr_depth == (depth - 1) then
+ up = true
+ end
+ end
+ var r = new FlatBuffer.with_capacity(length)
+ for i in lines do
+ r.append i.to_s.replace(".", "")
+ end
+ return r.to_s
+ end
+
+ # Transforms a rail-fence-encrypted String to its original
+ #
+ # assert "fgounbmtcieehkh".unrail(4) == "fuckingbehemoth"
+ fun unrail(depth: Int): String do
+ var dots = "." * length
+ var arr = new FlatBuffer.from(dots)
+ var start = 0
+ var paces = depth.unrail_paces
+ for i in [0..depth[ do
+ var lp = paces[i].first
+ var rp = paces[i].second
+ var pos = i
+ var l = true
+ while pos < length do
+ arr[pos] = chars[start]
+ if l then
+ pos += lp
+ l = false
+ else
+ pos += rp
+ l = true
+ end
+ start += 1
+ end
+ end
+ return arr.to_s
+ end
+end
+
+redef class Int
+ # Generates the paces for each depth.
+ #
+ # Each entry of the returned array is a couple of the first pace
+ # and the second one, they are alternated when deciphering a rail-encrypted string.
+ #
+ # Say we have the encrypted string "fgounbmtcieehkh" on 4 rails
+ #
+ # To find the distance between each character on the original railed
+ # string, we need to compute the extremes.
+ #
+ # The extremes always have a distance of `depth - 1`, multiplied by 2, no pairing.
+ #
+ # In the example, that would be : [(4 - 1) * 2, (4 - 1) * 2] => [6,6]
+ #
+ # For every rail in-between, the first distance is the largest absolute value
+ # of the difference between the current depth and the extremes, multiplied by 2.
+ #
+ # Its pair is the distance of maximum and the distance yielded by the previous
+ # calculation.
+ #
+ # In our example, that would be :
+ #
+ # Maximums : (4 - 1) * 2 = 3 * 2 => [6,6]
+ # In between : Distance for depth 2 : max(2 - 1, 4 - 2) => 2
+ # The calculation yields the couple [(2 * 2), 6 - 4] => [4, 2]
+ # The symmetric couple is reversed : [2, 4]
+ #
+ # In fine, the example yields the array : [[6,6], [4,2], [2,4], [6,6]]
+ #
+ # In the end, our string is read using the generated array
+ #
+ # SEE: `String::unrail` for how the array is used
+ private fun unrail_paces: Array[Couple[Int, Int]] do
+ var ret = new Array[Couple[Int,Int]].with_capacity(self)
+ var extremes = new Couple[Int, Int]((self - 1) * 2, (self - 1) * 2)
+ for i in [0..self[ do
+ ret.add extremes
+ end
+ var mid = ((self.to_f)/2.0).floor.to_i
+ for i in [1 .. mid[ do
+ var rd = i + 1
+ var lodepth = self - rd
+ var hidepth = (rd - self).abs
+ var dd: Int
+ if hidepth > lodepth then
+ dd = hidepth * 2
+ else
+ dd = lodepth * 2
+ end
+ var cp = new Couple[Int, Int](dd, extremes.first-dd)
+ var ccp = new Couple[Int, Int](extremes.first - dd, dd)
+
+ ret[i] = cp
+ ret[self - rd] = ccp
+ end
+ if not self.is_even then
+ ret[mid] = new Couple[Int, Int](extremes.first/2, extremes.first/2)
+ end
+ return ret
+ end
+end
class CSVDocument
super Streamable
- var header: Array[String] writable = new Array[String]
+ var header: Array[String] = new Array[String] is writable
var lines: Array[Array[String]] = new Array[Array[String]]
fun set_header(values: Object...) do
# CURL Request
class CurlRequest
- var verbose: Bool writable = false
+ var verbose: Bool = false is writable
private var curl: nullable Curl = null
# Launch request method
super CurlCallbacksRegisterIntern
var url: String
- var datas: nullable HeaderMap writable = null
- var headers: nullable HeaderMap writable = null
+ var datas: nullable HeaderMap = null is writable
+ var headers: nullable HeaderMap = null is writable
# Set the user agent for all following HTTP requests
fun user_agent=(name: String)
super CurlRequest
super CCurlCallbacks
- var headers: nullable HeaderMap writable = null
- var headers_body: nullable HeaderMap writable = null
- var from: nullable String writable = null
- var to: nullable Array[String] writable = null
- var cc: nullable Array[String] writable = null
- var bcc: nullable Array[String] writable = null
- var subject: nullable String writable = ""
- var body: nullable String writable = ""
+ var headers: nullable HeaderMap = null is writable
+ var headers_body: nullable HeaderMap = null is writable
+ var from: nullable String = null is writable
+ var to: nullable Array[String] = null is writable
+ var cc: nullable Array[String] = null is writable
+ var bcc: nullable Array[String] = null is writable
+ var subject: nullable String = "" is writable
+ var body: nullable String = "" is writable
private var supported_outgoing_protocol: Array[String] = ["smtp", "smtps"]
init (curl: nullable Curl)
# Callbacks attributes
abstract class CurlCallbacksRegisterIntern
- var delegate: nullable CurlCallbacks writable = null
+ var delegate: nullable CurlCallbacks = null is writable
end
# Abstract Curl request response
module curl_c is pkgconfig("libcurl")
in "C header" `{
- #include <stdio.h>
- #include <stdlib.h>
#include <curl/curl.h>
typedef enum {
`}
in "C body" `{
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+
// Callbacks method for Header, Body, Stream.
size_t nit_curl_callback_func(void *buffer, size_t size, size_t count, CURLCallbackDatas *datas){
if(datas->type == CURLcallbackTypeHeader){
# C library. If a method or class is not documented in Nit, refer to
# the official documentation by the Khronos Group at:
# http://www.khronos.org/registry/egl/sdk/docs/man/xhtml/
-module egl is pkgconfig("egl")
+module egl is pkgconfig
in "C Header" `{
#include <EGL/egl.h>
# The second element to compare
var b: E
# The result of the comparison (according to the user)
- var res writable = 0
+ var res = 0 is writable
end
# Abuser for sorting array, see `sort_fa`
# C library. If a method or class is not documented in Nit, refer to
# the official documentation by the Khronos Group at:
# http://www.khronos.org/opengles/sdk/docs/man/
-module glesv2 is pkgconfig("glesv2")
+module glesv2 is pkgconfig
in "C Header" `{
#include <GLES2/gl2.h>
private class ConfigNode
var parent: nullable ConfigNode
var children = new HashMap[String, ConfigNode]
- var name: String writable
+ var name: String is writable
var value: nullable String
init(name: String) do
--- /dev/null
+A markdown parser for Nit.
+
+Markdown documentation can be found in http://daringfireball.net/projects/markdown/.
+This parser is inspired by the famous TxtMark for Java (https://github.com/rjeschke/txtmark).
+
+## Usage
+
+`nitmd` can be used as a standalone tool:
+
+ $ nitmd file.md
+
+Or you can use it programmatically by importing the `markdown` module.
+
+## Differences with Markdown specification
+
+This parser passes all tests inside http://daringfireball.net/projects/downloads/MarkdownTest_1.0_2007-05-09.tgz execpt of two:
+
+1. Images.text: fails because this parser doesn't produce empty 'title' image attributes.
+2. Literal quotes in titles.text: because markdown accepts unescaped quotes in titles and this is wrong.
+
+## Testing
+
+The NitUnit test suite can be found in `test_markdown.nit`.
+
+Minimalists tests are prefixed with `process_*`. All tests from daringfireball are prefixed with `process_daring*`.
+
+Run the test suite:
+
+ $ nitunit lib/markdown/markdown.nit -t lib/markdown/test_markdown.nit
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Markdown parsing.
+module markdown
+
+import template
+
+# Parse a markdown string and split it in blocks.
+#
+# Blocks are then outputed by an `MarkdownEmitter`.
+#
+# Usage:
+#
+# var proc = new MarkdownProcessor
+# var html = proc.process("**Hello World!**")
+# assert html == "<p><strong>Hello World!</strong></p>\n"
+#
+# SEE: `String::md_to_html` for a shortcut.
+class MarkdownProcessor
+
+ var emitter: MarkdownEmitter is noinit
+
+ init do self.emitter = new MarkdownEmitter(self)
+
+ # Process the mardown `input` string and return the processed output.
+ fun process(input: String): Streamable do
+ # init processor
+ link_refs.clear
+ last_link_ref = null
+ current_line = null
+ current_block = null
+ # parse markdown
+ var parent = read_lines(input)
+ parent.remove_surrounding_empty_lines
+ recurse(parent, false)
+ # output processed text
+ return emitter.emit(parent.kind)
+ end
+
+ # Split `input` string into `MDLines` and create a parent `MDBlock` with it.
+ private fun read_lines(input: String): MDBlock do
+ var block = new MDBlock
+ var value = new FlatBuffer
+ var i = 0
+ while i < input.length do
+ value.clear
+ var pos = 0
+ var eol = false
+ while not eol and i < input.length do
+ var c = input[i]
+ if c == '\n' then
+ i += 1
+ eol = true
+ else if c == '\t' then
+ var np = pos + (4 - (pos.bin_and(3)))
+ while pos < np do
+ value.add ' '
+ pos += 1
+ end
+ i += 1
+ else
+ pos += 1
+ value.add c
+ i += 1
+ end
+ end
+
+ var line = new MDLine(value.write_to_string)
+ var is_link_ref = check_link_ref(line)
+ # Skip link refs
+ if not is_link_ref then block.add_line line
+ end
+ return block
+ end
+
+ # Check if line is a block link definition.
+ # Return `true` if line contains a valid link ref and save it into `link_refs`.
+ private fun check_link_ref(line: MDLine): Bool do
+ var md = line.value
+ var is_link_ref = false
+ var id = new FlatBuffer
+ var link = new FlatBuffer
+ var comment = new FlatBuffer
+ var pos = -1
+ if not line.is_empty and line.leading < 4 and line.value[line.leading] == '[' then
+ pos = line.leading + 1
+ pos = md.read_until(id, pos, ']')
+ if not id.is_empty and pos + 2 < line.value.length then
+ if line.value[pos + 1] == ':' then
+ pos += 2
+ pos = md.skip_spaces(pos)
+ if line.value[pos] == '<' then
+ pos += 1
+ pos = md.read_until(link, pos, '>')
+ pos += 1
+ else
+ pos = md.read_until(link, pos, ' ', '\n')
+ end
+ if not link.is_empty then
+ pos = md.skip_spaces(pos)
+ if pos > 0 and pos < line.value.length then
+ var c = line.value[pos]
+ if c == '\"' or c == '\'' or c == '(' then
+ pos += 1
+ if c == '(' then
+ pos = md.read_until(comment, pos, ')')
+ else
+ pos = md.read_until(comment, pos, c)
+ end
+ if pos > 0 then is_link_ref = true
+ end
+ else
+ is_link_ref = true
+ end
+ end
+ end
+ end
+ end
+ if is_link_ref and not id.is_empty and not link.is_empty then
+ var lr = new LinkRef.with_title(link.write_to_string, comment.write_to_string)
+ add_link_ref(id.write_to_string, lr)
+ if comment.is_empty then last_link_ref = lr
+ return true
+ else
+ comment = new FlatBuffer
+ if not line.is_empty and last_link_ref != null then
+ pos = line.leading
+ var c = line.value[pos]
+ if c == '\"' or c == '\'' or c == '(' then
+ pos += 1
+ if c == '(' then
+ pos = md.read_until(comment, pos, ')')
+ else
+ pos = md.read_until(comment, pos, c)
+ end
+ end
+ if not comment.is_empty then last_link_ref.title = comment.write_to_string
+ end
+ if comment.is_empty then return false
+ return true
+ end
+ end
+
+ # Known link refs
+ # This list will be needed during output to expand links.
+ var link_refs: Map[String, LinkRef] = new HashMap[String, LinkRef]
+
+ # Last encountered link ref (for multiline definitions)
+ #
+ # Markdown allows link refs to be defined over two lines:
+ #
+ # [id]: http://example.com/longish/path/to/resource/here
+ # "Optional Title Here"
+ #
+ private var last_link_ref: nullable LinkRef = null
+
+ # Add a link ref to the list
+ fun add_link_ref(key: String, ref: LinkRef) do link_refs[key.to_lower] = ref
+
+ # Recursively split a `block`.
+ #
+ # The block is splitted according to the type of lines it contains.
+ # Some blocks can be splited again recursively like lists.
+ # The `in_list` mode is used to recurse on list and build
+ # nested paragraphs or code blocks.
+ fun recurse(root: MDBlock, in_list: Bool) do
+ var old_mode = self.in_list
+ var old_root = self.current_block
+ self.in_list = in_list
+
+ var line = root.first_line
+ while line != null and line.is_empty do
+ line = line.next
+ if line == null then return
+ end
+
+ current_line = line
+ current_block = root
+ while current_line != null do
+ current_line.kind(self).process(self)
+ end
+ self.in_list = old_mode
+ self.current_block = old_root
+ end
+
+ # Currently processed line.
+ # Used when visiting blocks with `recurse`.
+ var current_line: nullable MDLine = null is writable
+
+ # Currently processed block.
+ # Used when visiting blocks with `recurse`.
+ var current_block: nullable MDBlock = null is writable
+
+ # Is the current recursion in list mode?
+ # Used when visiting blocks with `recurse`
+ private var in_list = false
+end
+
+# Emit output corresponding to blocks content.
+#
+# Blocks are created by a previous pass in `MarkdownProcessor`.
+# The emitter use a `Decorator` to select the output format.
+class MarkdownEmitter
+
+ # Processor containing link refs.
+ var processor: MarkdownProcessor
+
+ # Decorator used for output.
+ # Default is `HTMLDecorator`
+ var decorator: Decorator = new HTMLDecorator is writable
+
+ # Create a new `MardownEmitter` using the default `HTMLDecorator`
+ init(processor: MarkdownProcessor) do
+ self.processor = processor
+ end
+
+ # Create a new `MarkdownEmitter` using a custom `decorator`.
+ init with_decorator(processor: MarkdownProcessor, decorator: Decorator) do
+ init processor
+ self.decorator = decorator
+ end
+
+ # Output `block` using `decorator` in the current buffer.
+ fun emit(block: Block): Text do
+ var buffer = push_buffer
+ block.emit(self)
+ pop_buffer
+ return buffer
+ end
+
+ # Output the content of `block`.
+ fun emit_in(block: Block) do block.emit_in(self)
+
+ # Transform and emit mardown text
+ fun emit_text(text: Text) do
+ emit_text_until(text, 0, null)
+ end
+
+ # Transform and emit mardown text starting at `from` and
+ # until a token with the same type as `token` is found.
+ # Go until the end of text if `token` is null.
+ fun emit_text_until(text: Text, start: Int, token: nullable Token): Int do
+ var old_text = current_text
+ var old_pos = current_pos
+ current_text = text
+ current_pos = start
+ while current_pos < text.length do
+ var mt = text.token_at(current_pos)
+ if (token != null and not token isa TokenNone) and
+ (mt.is_same_type(token) or
+ (token isa TokenEmStar and mt isa TokenStrongStar) or
+ (token isa TokenEmUnderscore and mt isa TokenStrongUnderscore)) then
+ return current_pos
+ end
+ mt.emit(self)
+ current_pos += 1
+ end
+ current_text = old_text
+ current_pos = old_pos
+ return -1
+ end
+
+ # Currently processed position in `current_text`.
+ # Used when visiting inline production with `emit_text_until`.
+ private var current_pos: Int = -1
+
+ # Currently processed text.
+ # Used when visiting inline production with `emit_text_until`.
+ private var current_text: nullable Text = null
+
+ # Stacked buffers.
+ private var buffer_stack = new List[FlatBuffer]
+
+ # Push a new buffer on the stack.
+ private fun push_buffer: FlatBuffer do
+ var buffer = new FlatBuffer
+ buffer_stack.add buffer
+ return buffer
+ end
+
+ # Pop the last buffer.
+ private fun pop_buffer do buffer_stack.pop
+
+ # Current output buffer.
+ private fun current_buffer: FlatBuffer do
+ assert not buffer_stack.is_empty
+ return buffer_stack.last
+ end
+
+ # Append `e` to current buffer.
+ fun add(e: Streamable) do
+ if e isa Text then
+ current_buffer.append e
+ else
+ current_buffer.append e.write_to_string
+ end
+ end
+
+ # Append `c` to current buffer.
+ fun addc(c: Char) do current_buffer.add c
+
+ # Append a "\n" line break.
+ fun addn do current_buffer.add '\n'
+end
+
+# A Link Reference.
+# Links that are specified somewhere in the mardown document to be reused as shortcuts.
+#
+# Example:
+#
+# [1]: http://example.com/ "Optional title"
+class LinkRef
+
+ # Link href
+ var link: String
+
+ # Optional link title
+ var title: nullable String = null
+
+ # Is the link an abreviation?
+ var is_abbrev = false
+
+ init with_title(link: String, title: nullable String) do
+ self.link = link
+ self.title = title
+ end
+end
+
+# A `Decorator` is used to emit mardown into a specific format.
+# Default decorator used is `HTMLDecorator`.
+interface Decorator
+
+ # Render a ruler block.
+ fun add_ruler(v: MarkdownEmitter, block: BlockRuler) is abstract
+
+ # Render a headline block with corresponding level.
+ fun add_headline(v: MarkdownEmitter, block: BlockHeadline) is abstract
+
+ # Render a paragraph block.
+ fun add_paragraph(v: MarkdownEmitter, block: BlockParagraph) is abstract
+
+ # Render a code or fence block.
+ fun add_code(v: MarkdownEmitter, block: BlockCode) is abstract
+
+ # Render a blockquote.
+ fun add_blockquote(v: MarkdownEmitter, block: BlockQuote) is abstract
+
+ # Render an unordered list.
+ fun add_unorderedlist(v: MarkdownEmitter, block: BlockUnorderedList) is abstract
+
+ # Render an ordered list.
+ fun add_orderedlist(v: MarkdownEmitter, block: BlockOrderedList) is abstract
+
+ # Render a list item.
+ fun add_listitem(v: MarkdownEmitter, block: BlockListItem) is abstract
+
+ # Render an emphasis text.
+ fun add_em(v: MarkdownEmitter, text: Text) is abstract
+
+ # Render a strong text.
+ fun add_strong(v: MarkdownEmitter, text: Text) is abstract
+
+ # Render a super text.
+ fun add_super(v: MarkdownEmitter, text: Text) is abstract
+
+ # Render a link.
+ fun add_link(v: MarkdownEmitter, link: Text, name: Text, comment: nullable Text) is abstract
+
+ # Render an image.
+ fun add_image(v: MarkdownEmitter, link: Text, name: Text, comment: nullable Text) is abstract
+
+ # Render an abbreviation.
+ fun add_abbr(v: MarkdownEmitter, name: Text, comment: Text) is abstract
+
+ # Render a code span reading from a buffer.
+ fun add_span_code(v: MarkdownEmitter, buffer: Text, from, to: Int) is abstract
+
+ # Render a text and escape it.
+ fun append_value(v: MarkdownEmitter, value: Text) is abstract
+
+ # Render code text from buffer and escape it.
+ fun append_code(v: MarkdownEmitter, buffer: Text, from, to: Int) is abstract
+
+ # Render a character escape.
+ fun escape_char(v: MarkdownEmitter, char: Char) is abstract
+
+ # Render a line break
+ fun add_line_break(v: MarkdownEmitter) is abstract
+
+ # Generate a new html valid id from a `String`.
+ fun strip_id(txt: String): String is abstract
+
+ # Found headlines during the processing labeled by their ids.
+ fun headlines: ArrayMap[String, HeadLine] is abstract
+end
+
+# Class representing a markdown headline.
+class HeadLine
+ # Unique identifier of this headline.
+ var id: String
+
+ # Text of the headline.
+ var title: String
+
+ # Level of this headline.
+ #
+ # According toe the markdown specification, level must be in `[1..6]`.
+ var level: Int
+end
+
+# `Decorator` that outputs HTML.
+class HTMLDecorator
+ super Decorator
+
+ redef var headlines = new ArrayMap[String, HeadLine]
+
+ redef fun add_ruler(v, block) do v.add "<hr/>\n"
+
+ redef fun add_headline(v, block) do
+ # save headline
+ var txt = block.block.first_line.value
+ var id = strip_id(txt)
+ var lvl = block.depth
+ headlines[id] = new HeadLine(id, txt, lvl)
+ # output it
+ v.add "<h{lvl} id=\"{id}\">"
+ v.emit_in block
+ v.add "</h{lvl}>\n"
+ end
+
+ redef fun add_paragraph(v, block) do
+ v.add "<p>"
+ v.emit_in block
+ v.add "</p>\n"
+ end
+
+ redef fun add_code(v, block) do
+ v.add "<pre><code>"
+ v.emit_in block
+ v.add "</code></pre>\n"
+ end
+
+ redef fun add_blockquote(v, block) do
+ v.add "<blockquote>\n"
+ v.emit_in block
+ v.add "</blockquote>\n"
+ end
+
+ redef fun add_unorderedlist(v, block) do
+ v.add "<ul>\n"
+ v.emit_in block
+ v.add "</ul>\n"
+ end
+
+ redef fun add_orderedlist(v, block) do
+ v.add "<ol>\n"
+ v.emit_in block
+ v.add "</ol>\n"
+ end
+
+ redef fun add_listitem(v, block) do
+ v.add "<li>"
+ v.emit_in block
+ v.add "</li>\n"
+ end
+
+ redef fun add_em(v, text) do
+ v.add "<em>"
+ v.add text
+ v.add "</em>"
+ end
+
+ redef fun add_strong(v, text) do
+ v.add "<strong>"
+ v.add text
+ v.add "</strong>"
+ end
+
+ redef fun add_super(v, text) do
+ v.add "<sup>"
+ v.add text
+ v.add "</sup>"
+ end
+
+ redef fun add_image(v, link, name, comment) do
+ v.add "<img src=\""
+ append_value(v, link)
+ v.add "\" alt=\""
+ append_value(v, name)
+ v.add "\""
+ if comment != null and not comment.is_empty then
+ v.add " title=\""
+ append_value(v, comment)
+ v.add "\""
+ end
+ v.add "/>"
+ end
+
+ redef fun add_link(v, link, name, comment) do
+ v.add "<a href=\""
+ append_value(v, link)
+ v.add "\""
+ if comment != null and not comment.is_empty then
+ v.add " title=\""
+ append_value(v, comment)
+ v.add "\""
+ end
+ v.add ">"
+ v.emit_text(name)
+ v.add "</a>"
+ end
+
+ redef fun add_abbr(v, name, comment) do
+ v.add "<abbr title=\""
+ append_value(v, comment)
+ v.add "\">"
+ v.emit_text(name)
+ v.add "</abbr>"
+ end
+
+ redef fun add_span_code(v, text, from, to) do
+ v.add "<code>"
+ append_code(v, text, from, to)
+ v.add "</code>"
+ end
+
+ redef fun add_line_break(v) do
+ v.add "<br/>"
+ end
+
+ redef fun append_value(v, text) do for c in text do escape_char(v, c)
+
+ redef fun escape_char(v, c) do
+ if c == '&' then
+ v.add "&"
+ else if c == '<' then
+ v.add "<"
+ else if c == '>' then
+ v.add ">"
+ else if c == '"' then
+ v.add """
+ else if c == '\'' then
+ v.add "'"
+ else
+ v.addc c
+ end
+ end
+
+ redef fun append_code(v, buffer, from, to) do
+ for i in [from..to[ do
+ var c = buffer[i]
+ if c == '&' then
+ v.add "&"
+ else if c == '<' then
+ v.add "<"
+ else if c == '>' then
+ v.add ">"
+ else
+ v.addc c
+ end
+ end
+ end
+
+ redef fun strip_id(txt) do
+ # strip id
+ var b = new FlatBuffer
+ for c in txt do
+ if c == ' ' then
+ b.add '_'
+ else
+ if not c.is_letter and
+ not c.is_digit and
+ not allowed_id_chars.has(c) then continue
+ b.add c
+ end
+ end
+ var res = b.to_s
+ var key = res
+ # check for multiple id definitions
+ if headlines.has_key(key) then
+ var i = 1
+ key = "{res}_{i}"
+ while headlines.has_key(key) do
+ i += 1
+ key = "{res}_{i}"
+ end
+ end
+ return key
+ end
+
+ private var allowed_id_chars: Array[Char] = ['-', '_', ':', '.']
+end
+
+# A block of markdown lines.
+# A `MDBlock` can contains lines and/or sub-blocks.
+class MDBlock
+ # Kind of block.
+ # See `Block`.
+ var kind: Block = new BlockNone(self) is writable
+
+ # First line if any.
+ var first_line: nullable MDLine = null is writable
+
+ # Last line if any.
+ var last_line: nullable MDLine = null is writable
+
+ # First sub-block if any.
+ var first_block: nullable MDBlock = null is writable
+
+ # Last sub-block if any.
+ var last_block: nullable MDBlock = null is writable
+
+ # Previous block if any.
+ var prev: nullable MDBlock = null is writable
+
+ # Next block if any.
+ var next: nullable MDBlock = null is writable
+
+ # Does this block contain subblocks?
+ fun has_blocks: Bool do return first_block != null
+
+ # Count sub-blocks.
+ fun count_blocks: Int do
+ var count = 0
+ var block = first_block
+ while block != null do
+ count += 1
+ block = block.next
+ end
+ return count
+ end
+
+ # Does this block contain lines?
+ fun has_lines: Bool do return first_line != null
+
+ # Count block lines.
+ fun count_lines: Int do
+ var count = 0
+ var line = first_line
+ while line != null do
+ count += 1
+ line = line.next
+ end
+ return count
+ end
+
+ # Split `self` creating a new sub-block having `line` has `last_line`.
+ fun split(line: MDLine): MDBlock do
+ var block = new MDBlock
+ block.first_line = first_line
+ block.last_line = line
+ first_line = line.next
+ line.next = null
+ if first_line == null then
+ last_line = null
+ else
+ first_line.prev = null
+ end
+ if first_block == null then
+ first_block = block
+ last_block = block
+ else
+ last_block.next = block
+ last_block = block
+ end
+ return block
+ end
+
+ # Add a `line` to this block.
+ fun add_line(line: MDLine) do
+ if last_line == null then
+ first_line = line
+ last_line = line
+ else
+ last_line.next_empty = line.is_empty
+ line.prev_empty = last_line.is_empty
+ line.prev = last_line
+ last_line.next = line
+ last_line = line
+ end
+ end
+
+ # Remove `line` from this block.
+ fun remove_line(line: MDLine) do
+ if line.prev == null then
+ first_line = line.next
+ else
+ line.prev.next = line.next
+ end
+ if line.next == null then
+ last_line = line.prev
+ else
+ line.next.prev = line.prev
+ end
+ line.prev = null
+ line.next = null
+ end
+
+ # Remove leading empty lines.
+ fun remove_leading_empty_lines: Bool do
+ var was_empty = false
+ var line = first_line
+ while line != null and line.is_empty do
+ remove_line line
+ line = first_line
+ was_empty = true
+ end
+ return was_empty
+ end
+
+ # Remove trailing empty lines.
+ fun remove_trailing_empty_lines: Bool do
+ var was_empty = false
+ var line = last_line
+ while line != null and line.is_empty do
+ remove_line line
+ line = last_line
+ was_empty = true
+ end
+ return was_empty
+ end
+
+ # Remove leading and trailing empty lines.
+ fun remove_surrounding_empty_lines: Bool do
+ var was_empty = false
+ if remove_leading_empty_lines then was_empty = true
+ if remove_trailing_empty_lines then was_empty = true
+ return was_empty
+ end
+
+ # Remove list markers and up to 4 leading spaces.
+ # Used to clean nested lists.
+ fun remove_list_indent(v: MarkdownProcessor) do
+ var line = first_line
+ while line != null do
+ if not line.is_empty then
+ var kind = line.kind(v)
+ if kind isa LineList then
+ line.value = kind.extract_value(line)
+ else
+ line.value = line.value.substring_from(line.leading.min(4))
+ end
+ line.leading = line.process_leading
+ end
+ line = line.next
+ end
+ end
+
+ # Collect block line text.
+ fun text: String do
+ var text = new FlatBuffer
+ var line = first_line
+ while line != null do
+ if not line.is_empty then
+ text.append line.text
+ end
+ text.append "\n"
+ line = line.next
+ end
+ return text.write_to_string
+ end
+end
+
+# Representation of a markdown block in the AST.
+# Each `Block` is linked to a `MDBlock` that contains mardown code.
+abstract class Block
+
+ # The markdown block `self` is related to.
+ var block: MDBlock
+
+ # Output `self` using `v.decorator`.
+ fun emit(v: MarkdownEmitter) do v.emit_in(self)
+
+ # Emit the containts of `self`, lines or blocks.
+ fun emit_in(v: MarkdownEmitter) do
+ block.remove_surrounding_empty_lines
+ if block.has_lines then
+ emit_lines(v)
+ else
+ emit_blocks(v)
+ end
+ end
+
+ # Emit lines contained in `block`.
+ fun emit_lines(v: MarkdownEmitter) do
+ var tpl = v.push_buffer
+ var line = block.first_line
+ while line != null do
+ if not line.is_empty then
+ v.add line.value.substring(line.leading, line.value.length - line.trailing)
+ if line.trailing >= 2 then v.decorator.add_line_break(v)
+ end
+ if line.next != null then
+ v.addn
+ end
+ line = line.next
+ end
+ v.pop_buffer
+ v.emit_text(tpl)
+ end
+
+ # Emit sub-blocks contained in `block`.
+ fun emit_blocks(v: MarkdownEmitter) do
+ var block = self.block.first_block
+ while block != null do
+ block.kind.emit(v)
+ block = block.next
+ end
+ end
+end
+
+# A block without any markdown specificities.
+#
+# Actually use the same implementation than `BlockCode`,
+# this class is only used for typing purposes.
+class BlockNone
+ super Block
+end
+
+# A markdown blockquote.
+class BlockQuote
+ super Block
+
+ redef fun emit(v) do v.decorator.add_blockquote(v, self)
+
+ # Remove blockquote markers.
+ private fun remove_block_quote_prefix(block: MDBlock) do
+ var line = block.first_line
+ while line != null do
+ if not line.is_empty then
+ if line.value[line.leading] == '>' then
+ var rem = line.leading + 1
+ if line.leading + 1 < line.value.length and
+ line.value[line.leading + 1] == ' ' then
+ rem += 1
+ end
+ line.value = line.value.substring_from(rem)
+ line.leading = line.process_leading
+ end
+ end
+ line = line.next
+ end
+ end
+end
+
+# A markdown code block.
+class BlockCode
+ super Block
+
+ redef fun emit(v) do v.decorator.add_code(v, self)
+
+ redef fun emit_lines(v) do
+ var line = block.first_line
+ while line != null do
+ if not line.is_empty then
+ v.decorator.append_code(v, line.value, 4, line.value.length)
+ end
+ v.addn
+ line = line.next
+ end
+ end
+end
+
+# A markdown code-fence block.
+#
+# Actually use the same implementation than `BlockCode`,
+# this class is only used for typing purposes.
+class BlockFence
+ super BlockCode
+end
+
+# A markdown headline.
+class BlockHeadline
+ super Block
+
+ redef fun emit(v) do v.decorator.add_headline(v, self)
+
+ # Depth of the headline used to determine the headline level.
+ var depth = 0
+
+ # Remove healine marks from lines contained in `self`.
+ private fun transform_headline(block: MDBlock) do
+ if depth > 0 then return
+ var level = 0
+ var line = block.first_line
+ if line.is_empty then return
+ var start = line.leading
+ while start < line.value.length and line.value[start] == '#' do
+ level += 1
+ start += 1
+ end
+ while start < line.value.length and line.value[start] == ' ' do
+ start += 1
+ end
+ if start >= line.value.length then
+ line.is_empty = true
+ else
+ var nend = line.value.length - line.trailing - 1
+ while line.value[nend] == '#' do nend -= 1
+ while line.value[nend] == ' ' do nend -= 1
+ line.value = line.value.substring(start, nend - start + 1)
+ line.leading = 0
+ line.trailing = 0
+ end
+ depth = level.min(6)
+ end
+end
+
+# A markdown list item block.
+class BlockListItem
+ super Block
+
+ redef fun emit(v) do v.decorator.add_listitem(v, self)
+end
+
+# A markdown list block.
+# Can be either an ordered or unordered list, this class is mainly used to factorize code.
+abstract class BlockList
+ super Block
+
+ # Split list block into list items sub-blocks.
+ private fun init_block(v: MarkdownProcessor) do
+ var line = block.first_line
+ line = line.next
+ while line != null do
+ var t = line.kind(v)
+ if t isa LineList or
+ (not line.is_empty and (line.prev_empty and line.leading == 0 and
+ not (t isa LineList))) then
+ var sblock = block.split(line.prev.as(not null))
+ sblock.kind = new BlockListItem(sblock)
+ end
+ line = line.next
+ end
+ var sblock = block.split(block.last_line.as(not null))
+ sblock.kind = new BlockListItem(sblock)
+ end
+
+ # Expand list items as paragraphs if needed.
+ private fun expand_paragraphs(block: MDBlock) do
+ var outer = block.first_block
+ var inner: nullable MDBlock
+ var has_paragraph = false
+ while outer != null and not has_paragraph do
+ if outer.kind isa BlockListItem then
+ inner = outer.first_block
+ while inner != null and not has_paragraph do
+ if inner.kind isa BlockParagraph then
+ has_paragraph = true
+ end
+ inner = inner.next
+ end
+ end
+ outer = outer.next
+ end
+ if has_paragraph then
+ outer = block.first_block
+ while outer != null do
+ if outer.kind isa BlockListItem then
+ inner = outer.first_block
+ while inner != null do
+ if inner.kind isa BlockNone then
+ inner.kind = new BlockParagraph(inner)
+ end
+ inner = inner.next
+ end
+ end
+ outer = outer.next
+ end
+ end
+ end
+end
+
+# A markdown ordered list.
+class BlockOrderedList
+ super BlockList
+
+ redef fun emit(v) do v.decorator.add_orderedlist(v, self)
+end
+
+# A markdown unordred list.
+class BlockUnorderedList
+ super BlockList
+
+ redef fun emit(v) do v.decorator.add_unorderedlist(v, self)
+end
+
+# A markdown paragraph block.
+class BlockParagraph
+ super Block
+
+ redef fun emit(v) do v.decorator.add_paragraph(v, self)
+end
+
+# A markdown ruler.
+class BlockRuler
+ super Block
+
+ redef fun emit(v) do v.decorator.add_ruler(v, self)
+end
+
+# Xml blocks that can be found in markdown markup.
+class BlockXML
+ super Block
+
+ redef fun emit_lines(v) do
+ var line = block.first_line
+ while line != null do
+ if not line.is_empty then v.add line.value
+ v.addn
+ line = line.next
+ end
+ end
+end
+
+# A markdown line.
+class MDLine
+
+ # Text contained in this line.
+ var value: String is writable
+
+ # Is this line empty?
+ # Lines containing only spaces are considered empty.
+ var is_empty: Bool = true is writable
+
+ # Previous line in `MDBlock` or null if first line.
+ var prev: nullable MDLine = null is writable
+
+ # Next line in `MDBlock` or null if last line.
+ var next: nullable MDLine = null is writable
+
+ # Is the previous line empty?
+ var prev_empty: Bool = false is writable
+
+ # Is the next line empty?
+ var next_empty: Bool = false is writable
+
+ init(value: String) do
+ self.value = value
+ self.leading = process_leading
+ if leading != value.length then
+ self.is_empty = false
+ self.trailing = process_trailing
+ end
+ end
+
+ # Set `value` as an empty String and update `leading`, `trailing` and is_`empty`.
+ fun clear do
+ value = ""
+ leading = 0
+ trailing = 0
+ is_empty = true
+ if prev != null then prev.next_empty = true
+ if next != null then next.prev_empty = true
+ end
+
+ # The type of line.
+ # see `md_line_*`
+ fun kind(v: MarkdownProcessor): Line do
+ var value = self.value
+ if is_empty then return new LineEmpty
+ if leading > 3 then return new LineCode
+ if value[leading] == '#' then return new LineHeadline
+ if value[leading] == '>' then return new LineBlockquote
+
+ if value.length - leading - trailing > 2 then
+ if value[leading] == '`' and count_chars_start('`') >= 3 then
+ return new LineFence
+ end
+ if value[leading] == '~' and count_chars_start('~') >= 3 then
+ return new LineFence
+ end
+ end
+
+ if value.length - leading - trailing > 2 and
+ (value[leading] == '*' or value[leading] == '-' or value[leading] == '_') then
+ if count_chars(value[leading]) >= 3 then
+ return new LineHR
+ end
+ end
+
+ if value.length - leading >= 2 and value[leading + 1] == ' ' then
+ var c = value[leading]
+ if c == '*' or c == '-' or c == '+' then return new LineUList
+ end
+
+ if value.length - leading >= 3 and value[leading].is_digit then
+ var i = leading + 1
+ while i < value.length and value[i].is_digit do i += 1
+ if i + 1 < value.length and value[i] == '.' and value[i + 1] == ' ' then
+ return new LineOList
+ end
+ end
+
+ if value[leading] == '<' and check_html then return new LineXML
+
+ if next != null and not next.is_empty then
+ if next.count_chars('=') > 0 then
+ return new LineHeadline1
+ end
+ if next.count_chars('-') > 0 then
+ return new LineHeadline2
+ end
+ end
+ return new LineOther
+ end
+
+ # Number or leading spaces on this line.
+ var leading: Int = 0 is writable
+
+ # Compute `leading` depending on `value`.
+ fun process_leading: Int do
+ var count = 0
+ var value = self.value
+ while count < value.length and value[count] == ' ' do count += 1
+ if leading == value.length then clear
+ return count
+ end
+
+ # Number of trailing spaces on this line.
+ var trailing: Int = 0 is writable
+
+ # Compute `trailing` depending on `value`.
+ fun process_trailing: Int do
+ var count = 0
+ var value = self.value
+ while value[value.length - count - 1] == ' ' do
+ count += 1
+ end
+ return count
+ end
+
+ # Count the amount of `ch` in this line.
+ # Return A value > 0 if this line only consists of `ch` end spaces.
+ fun count_chars(ch: Char): Int do
+ var count = 0
+ for c in value do
+ if c == ' ' then
+ continue
+ end
+ if c == ch then
+ count += 1
+ continue
+ end
+ count = 0
+ break
+ end
+ return count
+ end
+
+ # Count the amount of `ch` at the start of this line ignoring spaces.
+ fun count_chars_start(ch: Char): Int do
+ var count = 0
+ for c in value do
+ if c == ' ' then
+ continue
+ end
+ if c == ch then
+ count += 1
+ else
+ break
+ end
+ end
+ return count
+ end
+
+ # Last XML line if any.
+ private var xml_end_line: nullable MDLine = null
+
+ # Does `value` contains valid XML markup?
+ private fun check_html: Bool do
+ var tags = new Array[String]
+ var tmp = new FlatBuffer
+ var pos = leading
+ if pos + 1 < value.length and value[pos + 1] == '!' then
+ if read_xml_comment(self, pos) > 0 then return true
+ end
+ pos = value.read_xml(tmp, pos, false)
+ var tag: String
+ if pos > -1 then
+ tag = tmp.xml_tag
+ if not tag.is_html_block then
+ return false
+ end
+ if tag == "hr" then
+ xml_end_line = self
+ return true
+ end
+ tags.add tag
+ var line: nullable MDLine = self
+ while line != null do
+ while pos < line.value.length and line.value[pos] != '<' do
+ pos += 1
+ end
+ if pos >= line.value.length then
+ if pos - 2 >= 0 and line.value[pos - 2] == '/' then
+ tags.pop
+ if tags.is_empty then
+ xml_end_line = line
+ break
+ end
+ end
+ line = line.next
+ pos = 0
+ else
+ tmp = new FlatBuffer
+ var new_pos = line.value.read_xml(tmp, pos, false)
+ if new_pos > 0 then
+ tag = tmp.xml_tag
+ if tag.is_html_block and not tag == "hr" then
+ if tmp[1] == '/' then
+ if tags.last != tag then
+ return false
+ end
+ tags.pop
+ else
+ tags.add tag
+ end
+ end
+ if tags.is_empty then
+ xml_end_line = line
+ break
+ end
+ pos = new_pos
+ else
+ pos += 1
+ end
+ end
+ end
+ return tags.is_empty
+ end
+ return false
+ end
+
+ # Read a XML comment.
+ # Used by `check_html`.
+ private fun read_xml_comment(first_line: MDLine, start: Int): Int do
+ var line: nullable MDLine = first_line
+ if start + 3 < line.value.length then
+ if line.value[2] == '-' and line.value[3] == '-' then
+ var pos = start + 4
+ while line != null do
+ while pos < line.value.length and line.value[pos] != '-' do
+ pos += 1
+ end
+ if pos == line.value.length then
+ line = line.next
+ pos = 0
+ else
+ if pos + 2 < line.value.length then
+ if line.value[pos + 1] == '-' and line.value[pos + 2] == '>' then
+ first_line.xml_end_line = line
+ return pos + 3
+ end
+ end
+ pos += 1
+ end
+ end
+ end
+ end
+ return -1
+ end
+
+ # Extract the text of `self` without leading and trailing.
+ fun text: String do return value.substring(leading, value.length - trailing)
+end
+
+# A markdown line.
+interface Line
+
+ # Parse the line.
+ # See `MarkdownProcessor::recurse`.
+ fun process(v: MarkdownProcessor) is abstract
+end
+
+# An empty markdown line.
+class LineEmpty
+ super Line
+
+ redef fun process(v) do
+ v.current_line = v.current_line.next
+ end
+end
+
+# A non-specific markdown construction.
+# Mainly used as part of another line construct such as paragraphs or lists.
+class LineOther
+ super Line
+
+ redef fun process(v) do
+ var line = v.current_line
+ # go to block end
+ var was_empty = line.prev_empty
+ while line != null and not line.is_empty do
+ var t = line.kind(v)
+ if v.in_list and t isa LineList then
+ break
+ end
+ if t isa LineCode or t isa LineFence then
+ break
+ end
+ if t isa LineHeadline or t isa LineHeadline1 or t isa LineHeadline2 or
+ t isa LineHR or t isa LineBlockquote or t isa LineXML then
+ break
+ end
+ line = line.next
+ end
+ # build block
+ var bk: Block
+ if line != null and not line.is_empty then
+ var block = v.current_block.split(line.prev.as(not null))
+ if v.in_list and not was_empty then
+ block.kind = new BlockNone(block)
+ else
+ block.kind = new BlockParagraph(block)
+ end
+ v.current_block.remove_leading_empty_lines
+ else
+ var block: MDBlock
+ if line != null then
+ block = v.current_block.split(line)
+ else
+ block = v.current_block.split(v.current_block.last_line.as(not null))
+ end
+ if v.in_list and (line == null or not line.is_empty) and not was_empty then
+ block.kind = new BlockNone(block)
+ else
+ block.kind = new BlockParagraph(block)
+ end
+ v.current_block.remove_leading_empty_lines
+ end
+ v.current_line = v.current_block.first_line
+ end
+end
+
+# A line of markdown code.
+class LineCode
+ super Line
+
+ redef fun process(v) do
+ var line = v.current_line
+ # lookup block end
+ while line != null and (line.is_empty or line.kind(v) isa LineCode) do
+ line = line.next
+ end
+ # split at block end line
+ var block: MDBlock
+ if line != null then
+ block = v.current_block.split(line.prev.as(not null))
+ else
+ block = v.current_block.split(v.current_block.last_line.as(not null))
+ end
+ block.kind = new BlockCode(block)
+ block.remove_surrounding_empty_lines
+ v.current_line = v.current_block.first_line
+ end
+end
+
+# A line of raw XML.
+class LineXML
+ super Line
+
+ redef fun process(v) do
+ var line = v.current_line
+ var prev = line.prev
+ if prev != null then v.current_block.split(prev)
+ var block = v.current_block.split(line.xml_end_line.as(not null))
+ block.kind = new BlockXML(block)
+ v.current_block.remove_leading_empty_lines
+ v.current_line = v.current_block.first_line
+ end
+end
+
+# A markdown blockquote line.
+class LineBlockquote
+ super Line
+
+ redef fun process(v) do
+ var line = v.current_line
+ # go to bquote end
+ while line != null do
+ if not line.is_empty and (line.prev_empty and
+ line.leading == 0 and
+ not line.kind(v) isa LineBlockquote) then break
+ line = line.next
+ end
+ # build sub block
+ var block: MDBlock
+ if line != null then
+ block = v.current_block.split(line.prev.as(not null))
+ else
+ block = v.current_block.split(v.current_block.last_line.as(not null))
+ end
+ var kind = new BlockQuote(block)
+ block.kind = kind
+ block.remove_surrounding_empty_lines
+ kind.remove_block_quote_prefix(block)
+ v.current_line = line
+ v.recurse(block, false)
+ v.current_line = v.current_block.first_line
+ end
+end
+
+# A markdown ruler line.
+class LineHR
+ super Line
+
+ redef fun process(v) do
+ var line = v.current_line
+ if line.prev != null then v.current_block.split(line.prev.as(not null))
+ var block = v.current_block.split(line.as(not null))
+ block.kind = new BlockRuler(block)
+ v.current_block.remove_leading_empty_lines
+ v.current_line = v.current_block.first_line
+ end
+end
+
+# A markdown fence code line.
+class LineFence
+ super Line
+
+ redef fun process(v) do
+ # go to fence end
+ var line = v.current_line.next
+ while line != null do
+ if line.kind(v) isa LineFence then break
+ line = line.next
+ end
+ if line != null then
+ line = line.next
+ end
+ # build fence block
+ var block: MDBlock
+ if line != null then
+ block = v.current_block.split(line.prev.as(not null))
+ else
+ block = v.current_block.split(v.current_block.last_line.as(not null))
+ end
+ block.kind = new BlockFence(block)
+ block.first_line.clear
+ if block.last_line.kind(v) isa LineFence then
+ block.last_line.clear
+ end
+ block.remove_surrounding_empty_lines
+ v.current_line = line
+ end
+end
+
+# A markdown headline.
+class LineHeadline
+ super Line
+
+ redef fun process(v) do
+ var line = v.current_line
+ var lprev = line.prev
+ if lprev != null then v.current_block.split(lprev)
+ var block = v.current_block.split(line.as(not null))
+ var kind = new BlockHeadline(block)
+ block.kind = kind
+ kind.transform_headline(block)
+ v.current_block.remove_leading_empty_lines
+ v.current_line = v.current_block.first_line
+ end
+end
+
+# A markdown headline of level 1.
+class LineHeadline1
+ super LineHeadline
+
+ redef fun process(v) do
+ var line = v.current_line
+ var lprev = line.prev
+ if lprev != null then v.current_block.split(lprev)
+ line.next.clear
+ var block = v.current_block.split(line.as(not null))
+ var kind = new BlockHeadline(block)
+ kind.depth = 1
+ kind.transform_headline(block)
+ block.kind = kind
+ v.current_block.remove_leading_empty_lines
+ v.current_line = v.current_block.first_line
+ end
+end
+
+# A markdown headline of level 2.
+class LineHeadline2
+ super LineHeadline
+
+ redef fun process(v) do
+ var line = v.current_line
+ var lprev = line.prev
+ if lprev != null then v.current_block.split(lprev)
+ line.next.clear
+ var block = v.current_block.split(line.as(not null))
+ var kind = new BlockHeadline(block)
+ kind.depth = 2
+ kind.transform_headline(block)
+ block.kind = kind
+ v.current_block.remove_leading_empty_lines
+ v.current_line = v.current_block.first_line
+ end
+end
+
+# A markdown list line.
+# Mainly used to factorize code between ordered and unordered lists.
+class LineList
+ super Line
+
+ redef fun process(v) do
+ var line = v.current_line
+ # go to list end
+ while line != null do
+ var t = line.kind(v)
+ if not line.is_empty and (line.prev_empty and line.leading == 0 and
+ not t isa LineList) then break
+ line = line.next
+ end
+ # build list block
+ var list: MDBlock
+ if line != null then
+ list = v.current_block.split(line.prev.as(not null))
+ else
+ list = v.current_block.split(v.current_block.last_line.as(not null))
+ end
+ var kind = block_kind(list)
+ list.kind = kind
+ list.first_line.prev_empty = false
+ list.last_line.next_empty = false
+ list.remove_surrounding_empty_lines
+ list.first_line.prev_empty = false
+ list.last_line.next_empty = false
+ kind.init_block(v)
+ var block = list.first_block
+ while block != null do
+ block.remove_list_indent(v)
+ v.recurse(block, true)
+ block = block.next
+ end
+ kind.expand_paragraphs(list)
+ v.current_line = line
+ end
+
+ # Create a new block kind based on this line.
+ protected fun block_kind(block: MDBlock): BlockList is abstract
+
+ protected fun extract_value(line: MDLine): String is abstract
+end
+
+# An ordered list line.
+class LineOList
+ super LineList
+
+ redef fun block_kind(block) do return new BlockOrderedList(block)
+
+ redef fun extract_value(line) do
+ return line.value.substring_from(line.value.index_of('.') + 2)
+ end
+end
+
+# An unordered list line.
+class LineUList
+ super LineList
+
+ redef fun block_kind(block) do return new BlockUnorderedList(block)
+
+ redef fun extract_value(line) do
+ return line.value.substring_from(line.leading + 2)
+ end
+end
+
+# A token represent a character in the markdown input.
+# Some tokens have a specific markup behaviour that is handled here.
+abstract class Token
+
+ # Position of `self` in markdown input.
+ var pos: Int
+
+ # Character found at `pos` in the markdown input.
+ var char: Char
+
+ # Output that token using `MarkdownEmitter::decorator`.
+ fun emit(v: MarkdownEmitter) do v.addc char
+end
+
+# A token without a specific meaning.
+class TokenNone
+ super Token
+end
+
+# An emphasis token.
+abstract class TokenEm
+ super Token
+
+ redef fun emit(v) do
+ var tmp = v.push_buffer
+ var b = v.emit_text_until(v.current_text.as(not null), pos + 1, self)
+ v.pop_buffer
+ if b > 0 then
+ v.decorator.add_em(v, tmp)
+ v.current_pos = b
+ else
+ v.addc char
+ end
+ end
+end
+
+# An emphasis star token.
+class TokenEmStar
+ super TokenEm
+end
+
+# An emphasis underscore token.
+class TokenEmUnderscore
+ super TokenEm
+end
+
+# A strong token.
+abstract class TokenStrong
+ super Token
+
+ redef fun emit(v) do
+ var tmp = v.push_buffer
+ var b = v.emit_text_until(v.current_text.as(not null), pos + 2, self)
+ v.pop_buffer
+ if b > 0 then
+ v.decorator.add_strong(v, tmp)
+ v.current_pos = b + 1
+ else
+ v.addc char
+ end
+ end
+end
+
+# A strong star token.
+class TokenStrongStar
+ super TokenStrong
+end
+
+# A strong underscore token.
+class TokenStrongUnderscore
+ super TokenStrong
+end
+
+# A code token.
+# This class is mainly used to factorize work between single and double quoted span codes.
+abstract class TokenCode
+ super Token
+
+ redef fun emit(v) do
+ var a = pos + next_pos + 1
+ var b = v.current_text.find_token(a, self)
+ if b > 0 then
+ v.current_pos = b + next_pos
+ while a < b and v.current_text[a] == ' ' do a += 1
+ if a < b then
+ while v.current_text[b - 1] == ' ' do b -= 1
+ v.decorator.add_span_code(v, v.current_text.as(not null), a, b)
+ end
+ else
+ v.addc char
+ end
+ end
+
+ private fun next_pos: Int is abstract
+end
+
+# A span code token.
+class TokenCodeSingle
+ super TokenCode
+
+ redef fun next_pos do return 0
+end
+
+# A doubled span code token.
+class TokenCodeDouble
+ super TokenCode
+
+ redef fun next_pos do return 1
+end
+
+# A link or image token.
+# This class is mainly used to factorize work between images and links.
+abstract class TokenLinkOrImage
+ super Token
+
+ # Link adress
+ var link: nullable Text = null
+
+ # Link text
+ var name: nullable Text = null
+
+ # Link title
+ var comment: nullable Text = null
+
+ # Is the link construct an abbreviation?
+ var is_abbrev = false
+
+ redef fun emit(v) do
+ var tmp = new FlatBuffer
+ var b = check_link(v, tmp, pos, self)
+ if b > 0 then
+ emit_hyper(v)
+ v.current_pos = b
+ else
+ v.addc char
+ end
+ end
+
+ # Emit the hyperlink as link or image.
+ private fun emit_hyper(v: MarkdownEmitter) is abstract
+
+ # Check if the link is a valid link.
+ private fun check_link(v: MarkdownEmitter, out: FlatBuffer, start: Int, token: Token): Int do
+ var md = v.current_text
+ var pos
+ if token isa TokenLink then
+ pos = start + 1
+ else
+ pos = start + 2
+ end
+ var tmp = new FlatBuffer
+ pos = md.read_md_link_id(tmp, pos)
+ if pos < start then return -1
+ name = tmp
+ var old_pos = pos
+ pos += 1
+ pos = md.skip_spaces(pos)
+ if pos < start then
+ var tid = name.write_to_string.to_lower
+ if v.processor.link_refs.has_key(tid) then
+ var lr = v.processor.link_refs[tid]
+ is_abbrev = lr.is_abbrev
+ link = lr.link
+ comment = lr.title
+ pos = old_pos
+ else
+ return -1
+ end
+ else if md[pos] == '(' then
+ pos += 1
+ pos = md.skip_spaces(pos)
+ if pos < start then return -1
+ tmp = new FlatBuffer
+ var use_lt = md[pos] == '<'
+ if use_lt then
+ pos = md.read_until(tmp, pos + 1, '>')
+ else
+ pos = md.read_md_link(tmp, pos)
+ end
+ if pos < start then return -1
+ if use_lt then pos += 1
+ link = tmp.write_to_string
+ if md[pos] == ' ' then
+ pos = md.skip_spaces(pos)
+ if pos > start and md[pos] == '"' then
+ pos += 1
+ tmp = new FlatBuffer
+ pos = md.read_until(tmp, pos, '"')
+ if pos < start then return -1
+ comment = tmp.write_to_string
+ pos += 1
+ pos = md.skip_spaces(pos)
+ if pos == -1 then return -1
+ end
+ end
+ if md[pos] != ')' then return -1
+ else if md[pos] == '[' then
+ pos += 1
+ tmp = new FlatBuffer
+ pos = md.read_raw_until(tmp, pos, ']')
+ if pos < start then return -1
+ var id
+ if tmp.length > 0 then
+ id = tmp
+ else
+ id = name
+ end
+ var tid = id.write_to_string.to_lower
+ if v.processor.link_refs.has_key(tid) then
+ var lr = v.processor.link_refs[tid]
+ link = lr.link
+ comment = lr.title
+ end
+ else
+ var tid = name.write_to_string.replace("\n", " ").to_lower
+ if v.processor.link_refs.has_key(tid) then
+ var lr = v.processor.link_refs[tid]
+ link = lr.link
+ comment = lr.title
+ pos = old_pos
+ else
+ return -1
+ end
+ end
+ if link == null then return -1
+ return pos
+ end
+end
+
+# A markdown link token.
+class TokenLink
+ super TokenLinkOrImage
+
+ redef fun emit_hyper(v) do
+ if is_abbrev and comment != null then
+ v.decorator.add_abbr(v, name.as(not null), comment.as(not null))
+ else
+ v.decorator.add_link(v, link.as(not null), name.as(not null), comment)
+ end
+ end
+end
+
+# A markdown image token.
+class TokenImage
+ super TokenLinkOrImage
+
+ redef fun emit_hyper(v) do
+ v.decorator.add_image(v, link.as(not null), name.as(not null), comment)
+ end
+end
+
+# A HTML/XML token.
+class TokenHTML
+ super Token
+
+ redef fun emit(v) do
+ var tmp = new FlatBuffer
+ var b = check_html(v, tmp, v.current_text.as(not null), v.current_pos)
+ if b > 0 then
+ v.add tmp
+ v.current_pos = b
+ else
+ v.decorator.escape_char(v, char)
+ end
+ end
+
+ # Is the HTML valid?
+ # Also take care of link and mailto shortcuts.
+ private fun check_html(v: MarkdownEmitter, out: FlatBuffer, md: Text, start: Int): Int do
+ # check for auto links
+ var tmp = new FlatBuffer
+ var pos = md.read_until(tmp, start + 1, ':', ' ', '>', '\n')
+ if pos != -1 and md[pos] == ':' and tmp.is_link_prefix then
+ pos = md.read_until(tmp, pos, '>')
+ if pos != -1 then
+ var link = tmp.write_to_string
+ v.decorator.add_link(v, link, link, null)
+ return pos
+ end
+ end
+ # TODO check for mailto
+ # check for inline html
+ if start + 2 < md.length then
+ return md.read_xml(out, start, true)
+ end
+ return -1
+ end
+end
+
+# An HTML entity token.
+class TokenEntity
+ super Token
+
+ redef fun emit(v) do
+ var tmp = new FlatBuffer
+ var b = check_entity(tmp, v.current_text.as(not null), pos)
+ if b > 0 then
+ v.add tmp
+ v.current_pos = b
+ else
+ v.decorator.escape_char(v, char)
+ end
+ end
+
+ # Is the entity valid?
+ private fun check_entity(out: FlatBuffer, md: Text, start: Int): Int do
+ var pos = md.read_until(out, start, ';')
+ if pos < 0 or out.length < 3 then
+ return -1
+ end
+ if out[1] == '#' then
+ if out[2] == 'x' or out[2] == 'X' then
+ if out.length < 4 then return -1
+ for i in [3..out.length[ do
+ var c = out[i]
+ if (c < '0' or c > '9') and (c < 'a' and c > 'f') and (c < 'A' and c > 'F') then
+ return -1
+ end
+ end
+ else
+ for i in [2..out.length[ do
+ var c = out[i]
+ if c < '0' or c > '9' then return -1
+ end
+ end
+ out.add ';'
+ else
+ for i in [1..out.length[ do
+ var c = out[i]
+ if not c.is_digit and not c.is_letter then return -1
+ end
+ out.add ';'
+ # TODO check entity is valid
+ # if out.is_entity then
+ return pos
+ # else
+ # return -1
+ # end
+ end
+ return pos
+ end
+end
+
+# A markdown escape token.
+class TokenEscape
+ super Token
+
+ redef fun emit(v) do
+ v.current_pos += 1
+ v.addc v.current_text[v.current_pos]
+ end
+end
+
+# A markdown super token.
+class TokenSuper
+ super Token
+
+ redef fun emit(v) do
+ var tmp = v.push_buffer
+ var b = v.emit_text_until(v.current_text.as(not null), pos + 1, self)
+ v.pop_buffer
+ if b > 0 then
+ v.decorator.add_super(v, tmp)
+ v.current_pos = b
+ else
+ v.addc char
+ end
+ end
+end
+
+redef class Text
+
+ # Get the token kind at `pos`.
+ private fun token_at(pos: Int): Token do
+ var c0: Char
+ var c1: Char
+ var c2: Char
+ var c3: Char
+
+ if pos > 0 then
+ c0 = self[pos - 1]
+ else
+ c0 = ' '
+ end
+ var c = self[pos]
+
+ if pos + 1 < length then
+ c1 = self[pos + 1]
+ else
+ c1 = ' '
+ end
+ if pos + 2 < length then
+ c2 = self[pos + 2]
+ else
+ c2 = ' '
+ end
+ if pos + 3 < length then
+ c3 = self[pos + 3]
+ else
+ c3 = ' '
+ end
+
+ if c == '*' then
+ if c1 == '*' then
+ if c0 != ' ' or c2 != ' ' then
+ return new TokenStrongStar(pos, c)
+ else
+ return new TokenEmStar(pos, c)
+ end
+ end
+ if c0 != ' ' or c1 != ' ' then
+ return new TokenEmStar(pos, c)
+ else
+ return new TokenNone(pos, c)
+ end
+ else if c == '_' then
+ if c1 == '_' then
+ if c0 != ' ' or c2 != ' 'then
+ return new TokenStrongUnderscore(pos, c)
+ else
+ return new TokenEmUnderscore(pos, c)
+ end
+ end
+ if c0 != ' ' or c1 != ' ' then
+ return new TokenEmUnderscore(pos, c)
+ else
+ return new TokenNone(pos, c)
+ end
+ else if c == '!' then
+ if c1 == '[' then return new TokenImage(pos, c)
+ return new TokenNone(pos, c)
+ else if c == '[' then
+ return new TokenLink(pos, c)
+ else if c == ']' then
+ return new TokenNone(pos, c)
+ else if c == '`' then
+ if c1 == '`' then
+ return new TokenCodeDouble(pos, c)
+ else
+ return new TokenCodeSingle(pos, c)
+ end
+ else if c == '\\' then
+ if c1 == '\\' or c1 == '[' or c1 == ']' or c1 == '(' or c1 == ')' or c1 == '{' or c1 == '}' or c1 == '#' or c1 == '"' or c1 == '\'' or c1 == '.' or c1 == '<' or c1 == '>' or c1 == '*' or c1 == '+' or c1 == '-' or c1 == '_' or c1 == '!' or c1 == '`' or c1 == '~' or c1 == '^' then
+ return new TokenEscape(pos, c)
+ else
+ return new TokenNone(pos, c)
+ end
+ else if c == '<' then
+ return new TokenHTML(pos, c)
+ else if c == '&' then
+ return new TokenEntity(pos, c)
+ else if c == '^' then
+ if c0 == '^' or c1 == '^' then
+ return new TokenNone(pos, c)
+ else
+ return new TokenSuper(pos, c)
+ end
+ else
+ return new TokenNone(pos, c)
+ end
+ end
+
+ # Find the position of a `token` in `self`.
+ private fun find_token(start: Int, token: Token): Int do
+ var pos = start
+ while pos < length do
+ if token_at(pos).is_same_type(token) then
+ return pos
+ end
+ pos += 1
+ end
+ return -1
+ end
+
+ # Get the position of the next non-space character.
+ private fun skip_spaces(start: Int): Int do
+ var pos = start
+ while pos > -1 and pos < length and (self[pos] == ' ' or self[pos] == '\n') do
+ pos += 1
+ end
+ if pos < length then return pos
+ return -1
+ end
+
+ # Read `self` until `nend` and append it to the `out` buffer.
+ # Escape markdown special chars.
+ private fun read_until(out: FlatBuffer, start: Int, nend: Char...): Int do
+ var pos = start
+ while pos < length do
+ var c = self[pos]
+ if c == '\\' and pos + 1 < length then
+ pos = escape(out, self[pos + 1], pos)
+ else
+ var end_reached = false
+ for n in nend do
+ if c == n then
+ end_reached = true
+ break
+ end
+ end
+ if end_reached then break
+ out.add c
+ end
+ pos += 1
+ end
+ if pos == length then return -1
+ return pos
+ end
+
+ # Read `self` as raw text until `nend` and append it to the `out` buffer.
+ # No escape is made.
+ private fun read_raw_until(out: FlatBuffer, start: Int, nend: Char...): Int do
+ var pos = start
+ while pos < length do
+ var c = self[pos]
+ var end_reached = false
+ for n in nend do
+ if c == n then
+ end_reached = true
+ break
+ end
+ end
+ if end_reached then break
+ out.add c
+ pos += 1
+ end
+ if pos == length then return -1
+ return pos
+ end
+
+ # Read `self` as XML until `to` and append it to the `out` buffer.
+ # Escape HTML special chars.
+ private fun read_xml_until(out: FlatBuffer, from: Int, to: Char...): Int do
+ var pos = from
+ var in_str = false
+ var str_char: nullable Char = null
+ while pos < length do
+ var c = self[pos]
+ if in_str then
+ if c == '\\' then
+ out.add c
+ pos += 1
+ if pos < length then
+ out.add c
+ pos += 1
+ end
+ continue
+ end
+ if c == str_char then
+ in_str = false
+ out.add c
+ pos += 1
+ continue
+ end
+ end
+ if c == '"' or c == '\'' then
+ in_str = true
+ str_char = c
+ end
+ if not in_str then
+ var end_reached = false
+ for n in [0..to.length[ do
+ if c == to[n] then
+ end_reached = true
+ break
+ end
+ end
+ if end_reached then break
+ end
+ out.add c
+ pos += 1
+ end
+ if pos == length then return -1
+ return pos
+ end
+
+ # Read `self` as XML and append it to the `out` buffer.
+ # Safe mode can be activated to limit reading to valid xml.
+ private fun read_xml(out: FlatBuffer, start: Int, safe_mode: Bool): Int do
+ var pos = 0
+ var is_close_tag = false
+ if start + 1 >= length then return -1
+ if self[start + 1] == '/' then
+ is_close_tag = true
+ pos = start + 2
+ else if self[start + 1] == '!' then
+ out.append "<!"
+ return start + 1
+ else
+ is_close_tag = false
+ pos = start + 1
+ end
+ if safe_mode then
+ var tmp = new FlatBuffer
+ pos = read_xml_until(tmp, pos, ' ', '/', '>')
+ if pos == -1 then return -1
+ var tag = tmp.write_to_string.trim.to_lower
+ if tag.is_html_unsafe then
+ out.append "<"
+ if is_close_tag then out.add '/'
+ out.append tmp
+ else
+ out.append "<"
+ if is_close_tag then out.add '/'
+ out.append tmp
+ end
+ else
+ out.add '<'
+ if is_close_tag then out.add '/'
+ pos = read_xml_until(out, pos, ' ', '/', '>')
+ end
+ if pos == -1 then return -1
+ pos = read_xml_until(out, pos, '/', '>')
+ if pos == -1 then return -1
+ if self[pos] == '/' then
+ out.append " /"
+ pos = self.read_xml_until(out, pos + 1, '>')
+ if pos == -1 then return -1
+ end
+ if self[pos] == '>' then
+ out.add '>'
+ return pos
+ end
+ return -1
+ end
+
+ # Read a markdown link address and append it to the `out` buffer.
+ private fun read_md_link(out: FlatBuffer, start: Int): Int do
+ var pos = start
+ var counter = 1
+ while pos < length do
+ var c = self[pos]
+ if c == '\\' and pos + 1 < length then
+ pos = escape(out, self[pos + 1], pos)
+ else
+ var end_reached = false
+ if c == '(' then
+ counter += 1
+ else if c == ' ' then
+ if counter == 1 then end_reached = true
+ else if c == ')' then
+ counter -= 1
+ if counter == 0 then end_reached = true
+ end
+ if end_reached then break
+ out.add c
+ end
+ pos += 1
+ end
+ if pos == length then return -1
+ return pos
+ end
+
+ # Read a markdown link text and append it to the `out` buffer.
+ private fun read_md_link_id(out: FlatBuffer, start: Int): Int do
+ var pos = start
+ var counter = 1
+ while pos < length do
+ var c = self[pos]
+ var end_reached = false
+ if c == '[' then
+ counter += 1
+ out.add c
+ else if c == ']' then
+ counter -= 1
+ if counter == 0 then
+ end_reached = true
+ else
+ out.add c
+ end
+ else
+ out.add c
+ end
+ if end_reached then break
+ pos += 1
+ end
+ if pos == length then return -1
+ return pos
+ end
+
+ # Extract the XML tag name from a XML tag.
+ private fun xml_tag: String do
+ var tpl = new FlatBuffer
+ var pos = 1
+ if pos < length and self[1] == '/' then pos += 1
+ while pos < length - 1 and (self[pos].is_digit or self[pos].is_letter) do
+ tpl.add self[pos]
+ pos += 1
+ end
+ return tpl.write_to_string.to_lower
+ end
+
+ # Read and escape the markdown contained in `self`.
+ private fun escape(out: FlatBuffer, c: Char, pos: Int): Int do
+ if c == '\\' or c == '[' or c == ']' or c == '(' or c == ')' or c == '{' or
+ c == '}' or c == '#' or c == '"' or c == '\'' or c == '.' or c == '<' or
+ c == '>' or c == '*' or c == '+' or c == '-' or c == '_' or c == '!' or
+ c == '`' or c == '~' or c == '^' then
+ out.add c
+ return pos + 1
+ end
+ out.add '\\'
+ return pos
+ end
+
+ # Is `self` an unsafe HTML element?
+ private fun is_html_unsafe: Bool do return html_unsafe_tags.has(self.write_to_string)
+
+ # Is `self` a HRML block element?
+ private fun is_html_block: Bool do return html_block_tags.has(self.write_to_string)
+
+ # Is `self` a link prefix?
+ private fun is_link_prefix: Bool do return html_link_prefixes.has(self.write_to_string)
+
+ private fun html_unsafe_tags: Array[String] do return once ["applet", "head", "body", "frame", "frameset", "iframe", "script", "object"]
+
+ private fun html_block_tags: Array[String] do return once ["address", "article", "aside", "audio", "blockquote", "canvas", "dd", "div", "dl", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "hr", "noscript", "ol", "output", "p", "pre", "section", "table", "tfoot", "ul", "video"]
+
+ private fun html_link_prefixes: Array[String] do return once ["http", "https", "ftp", "ftps"]
+end
+
+redef class String
+
+ # Parse `self` as markdown and return the HTML representation
+ #.
+ # var md = "**Hello World!**"
+ # var html = md.md_to_html
+ # assert html == "<p><strong>Hello World!</strong></p>\n"
+ fun md_to_html: Streamable do
+ var processor = new MarkdownProcessor
+ return processor.process(self)
+ end
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# A Markdown parser for Nit.
+module nitmd
+
+import markdown
+
+if args.length != 1 then
+ print "usage: nitmd <file.md>"
+ exit 0
+end
+
+var file = args.first
+if not file.file_exists then
+ print "'{file}' not found"
+ exit 0
+end
+
+var ifs = new IFStream.open(file)
+var md = ifs.read_all
+ifs.close
+
+var processor = new MarkdownProcessor
+print processor.process(md)
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Test suites for module `markdown`
+module test_markdown is test_suite
+
+import test_suite
+intrude import markdown
+
+class TestMarkdownProcessor
+ super TestSuite
+
+ fun test_process_empty do
+ var test = ""
+ var exp = ""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_tabs do
+ var test = """
+ some code
+"""
+ var exp = """<pre><code>some code
+</code></pre>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+
+ fun test_process_par1 do
+ var test = "test"
+ var exp = "<p>test</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_par2 do
+ var test = """
+line1
+line2
+
+line3 line4
+
+line5"""
+ var exp = """
+<p>line1
+line2</p>
+<p>line3 line4</p>
+<p>line5</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_par3 do
+ var test = """
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+"""
+ var exp = """
+<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</p>
+<p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_headings_1 do
+ var test = """
+This is a H1
+=============
+
+This is a H2
+-------------
+"""
+ var exp = """
+<h1 id="This_is_a_H1">This is a H1</h1>
+<h2 id="This_is_a_H2">This is a H2</h2>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_headings_2 do
+ var test = """
+# This is a H1
+
+## This is a H2
+###### This is a H6
+"""
+ var exp = """
+<h1 id="This_is_a_H1">This is a H1</h1>
+<h2 id="This_is_a_H2">This is a H2</h2>
+<h6 id="This_is_a_H6">This is a H6</h6>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_headings_3 do
+ var test = """
+# This is a H1 #
+
+## This is a H2 ##
+
+### This is a H3 ######
+"""
+ var exp = """
+<h1 id="This_is_a_H1">This is a H1</h1>
+<h2 id="This_is_a_H2">This is a H2</h2>
+<h3 id="This_is_a_H3">This is a H3</h3>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_hr do
+ var test = """
+* * *
+
+***
+
+*****
+
+- - -
+
+---------------------------------------
+"""
+ var exp = "<hr/>\n<hr/>\n<hr/>\n<hr/>\n<hr/>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_bquote1 do
+ var test = """
+> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+>
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+> id sem consectetuer libero luctus adipiscing.
+"""
+ var exp = """<blockquote>
+<p>This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</p>
+<p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.</p>
+</blockquote>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_bquote2 do
+ var test = """
+> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
+
+> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.
+"""
+ var exp = """<blockquote>
+<p>This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
+Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</p>
+<p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
+id sem consectetuer libero luctus adipiscing.</p>
+</blockquote>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_bquote3 do
+ var test = """
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+"""
+ var exp = """<blockquote>
+<p>This is the first level of quoting.</p>
+<blockquote>
+<p>This is nested blockquote.</p>
+</blockquote>
+<p>Back to the first level.</p>
+</blockquote>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list1 do
+ var test = """
+* Red
+* Green
+* Blue
+"""
+ var exp = """<ul>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list2 do
+ var test = """
++ Red
++ Green
++ Blue
+"""
+ var exp = """<ul>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list3 do
+ var test = """
+- Red
+- Green
+- Blue
+"""
+ var exp = """<ul>
+<li>Red</li>
+<li>Green</li>
+<li>Blue</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list4 do
+ var test = """
+1. Bird
+2. McHale
+3. Parish
+"""
+ var exp = """<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list5 do
+ var test = """
+3. Bird
+1. McHale
+8. Parish
+"""
+ var exp = """<ol>
+<li>Bird</li>
+<li>McHale</li>
+<li>Parish</li>
+</ol>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list6 do
+ var test = """
+* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+ viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+ Suspendisse id sem consectetuer libero luctus adipiscing.
+"""
+ var exp = """
+<ul>
+<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.</li>
+<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list7 do
+ var test = """
+* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.
+* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.
+"""
+ var exp = """
+<ul>
+<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
+viverra nec, fringilla in, laoreet vitae, risus.</li>
+<li>Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
+Suspendisse id sem consectetuer libero luctus adipiscing.</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list8 do
+ var test = """
+* Bird
+
+* Magic
+"""
+ var exp = """
+<ul>
+<li><p>Bird</p>
+</li>
+<li><p>Magic</p>
+</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list9 do
+ var test = """
+1. This is a list item with two paragraphs. Lorem ipsum dolor
+ sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+ mi posuere lectus.
+
+ Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+ vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+ sit amet velit.
+
+2. Suspendisse id sem consectetuer libero luctus adipiscing.
+"""
+ var exp = """
+<ol>
+<li><p>This is a list item with two paragraphs. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit. Aliquam hendrerit
+mi posuere lectus.</p>
+<p>Vestibulum enim wisi, viverra nec, fringilla in, laoreet
+vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
+sit amet velit.</p>
+</li>
+<li><p>Suspendisse id sem consectetuer libero luctus adipiscing.</p>
+</li>
+</ol>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_list10 do
+ var test = """
+* This is a list item with two paragraphs.
+
+ This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.
+
+* Another item in the same list.
+"""
+ var exp = """
+<ul>
+<li><p>This is a list item with two paragraphs.</p>
+<p>This is the second paragraph in the list item. You're
+only required to indent the first line. Lorem ipsum dolor
+sit amet, consectetuer adipiscing elit.</p>
+</li>
+<li><p>Another item in the same list.</p>
+</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_code1 do
+ var test = """
+This is a normal paragraph:
+
+ This is a code block.
+"""
+ var exp = """<p>This is a normal paragraph:</p>
+<pre><code>This is a code block.
+</code></pre>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_code2 do
+ var test = """
+Here is an example of AppleScript:
+
+ tell application "Foo"
+ beep
+ end tell
+
+ <div class="footer">
+ © 2004 Foo Corporation
+ </div>
+"""
+ var exp = """
+<p>Here is an example of AppleScript:</p>
+<pre><code>tell application "Foo"
+ beep
+end tell
+
+<div class="footer">
+ &copy; 2004 Foo Corporation
+</div>
+</code></pre>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_nesting1 do
+ var test = """
+> ## This is a header.
+>
+> 1. This is the first list item.
+> 2. This is the second list item.
+>
+> Here's some example code:
+>
+> return shell_exec("echo $input | $markdown_script");
+"""
+ var exp = """
+<blockquote>
+<h2 id="This_is_a_header.">This is a header.</h2>
+<ol>
+<li>This is the first list item.</li>
+<li>This is the second list item.</li>
+</ol>
+<p>Here's some example code:</p>
+<pre><code>return shell_exec("echo $input | $markdown_script");
+</code></pre>
+</blockquote>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_nesting2 do
+ var test = """
+* A list item with a blockquote:
+
+ > This is a blockquote
+ > inside a list item.
+"""
+ var exp = """
+<ul>
+<li><p>A list item with a blockquote:</p>
+<blockquote>
+<p>This is a blockquote
+inside a list item.</p>
+</blockquote>
+</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_nesting3 do
+ var test = """
+* A list item with a code block:
+
+ <code goes here>
+"""
+ var exp = """
+<ul>
+<li><p>A list item with a code block:</p>
+<pre><code><code goes here>
+</code></pre>
+</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_nesting4 do
+ var test = """
+* Tab
+ * Tab
+ * Tab
+"""
+ var exp = """
+<ul>
+<li>Tab<ul>
+<li>Tab<ul>
+<li>Tab</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ # TODO
+ # fun test_process_nesting5 do
+ # var test = """
+ # * this
+ #
+ # * sub
+ #
+ # that
+ # """
+ # var exp = """
+ # <ul>
+ # <li><p>this</p>
+ # <ul>
+ # <li>sub</li>
+ # </ul>
+ # <p>that</p>
+ # </li>
+ # </ul>
+ # """
+ # var res = test.md_to_html.write_to_string
+ # assert res == exp
+ # end
+
+ fun test_process_emph1 do
+ var test = """
+*single asterisks*
+
+_single underscores_
+
+**double asterisks**
+
+__double underscores__
+"""
+ var exp = """<p><em>single asterisks</em></p>
+<p><em>single underscores</em></p>
+<p><strong>double asterisks</strong></p>
+<p><strong>double underscores</strong></p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_emph2 do
+ var test = "un*frigging*believable"
+ var exp = "<p>un<em>frigging</em>believable</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_xml1 do
+ var test = """
+This is a regular paragraph.
+
+<table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+</table>
+
+This is another regular paragraph.
+"""
+ var exp = """
+<p>This is a regular paragraph.</p>
+<table>
+ <tr>
+ <td>Foo</td>
+ </tr>
+</table>
+<p>This is another regular paragraph.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_xml2 do
+ var test = """
+This is an image <img src="foo/bar" alt="baz"/> in a regular paragraph.
+"""
+ var exp = """<p>This is an image <img src="foo/bar" alt="baz" /> in a regular paragraph.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_xml3 do
+ var test = """
+<div style=">"/>
+"""
+ var exp = """
+<div style=">"/>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_span_code1 do
+ var test = "Use the `printf()` function."
+ var exp = "<p>Use the <code>printf()</code> function.</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_span_code2 do
+ var test = "``There is a literal backtick (`) here.``"
+ var exp = "<p><code>There is a literal backtick (`) here.</code></p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_span_code3 do
+ var test = """
+A single backtick in a code span: `` ` ``
+
+A backtick-delimited string in a code span: `` `foo` ``
+"""
+ var exp = """
+<p>A single backtick in a code span: <code>`</code></p>
+<p>A backtick-delimited string in a code span: <code>`foo`</code></p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_span_code4 do
+ var test = "Please don't use any `<blink>` tags."
+ var exp = "<p>Please don't use any <code><blink></code> tags.</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_span_code5 do
+ var test = "`—` is the decimal-encoded equivalent of `—`."
+ var exp = "<p><code>&#8212;</code> is the decimal-encoded equivalent of <code>&mdash;</code>.</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_escape1 do
+ var test = "\\*this text is surrounded by literal asterisks\\*"
+ var exp = "<p>*this text is surrounded by literal asterisks*</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_escape2 do
+ var test = "1986\\. What a great season."
+ var exp = "<p>1986. What a great season.</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_escape3 do
+ var test = "Ben & Lux"
+ var exp = "<p>Ben & Lux</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_link1 do
+ var test = """
+This is [an example](http://example.com/ "Title") inline link.
+
+[This link](http://example.net/) has no title attribute.
+"""
+ var exp = """<p>This is <a href="http://example.com/" title="Title">an example</a> inline link.</p>
+<p><a href="http://example.net/">This link</a> has no title attribute.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_link2 do
+ var test = "See my [About](/about/) page for details."
+ var exp = "<p>See my <a href=\"/about/\">About</a> page for details.</p>\n"
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_link3 do
+ var test = """
+This is [an example][id] reference-style link.
+
+This is [an example] [id] reference-style link.
+
+Some lorem ipsum
+
+[id]: http://example.com/ "Optional Title Here"
+
+Some other lipsum
+"""
+ var exp = """
+<p>This is <a href="http://example.com/" title="Optional Title Here">an example</a> reference-style link.</p>
+<p>This is <a href="http://example.com/" title="Optional Title Here">an example</a> reference-style link.</p>
+<p>Some lorem ipsum</p>
+<p>Some other lipsum</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_link4 do
+ var test = """
+This is multiple examples: [foo][1], [bar][2], [baz][3].
+
+[1]: http://example.com/ "Optional Title Here"
+[2]: http://example.com/ 'Optional Title Here'
+[3]: http://example.com/ (Optional Title Here)
+"""
+ var exp = """
+<p>This is multiple examples: <a href="http://example.com/" title="Optional Title Here">foo</a>, <a href="http://example.com/" title="Optional Title Here">bar</a>, <a href="http://example.com/" title="Optional Title Here">baz</a>.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_link5 do
+ var test = """
+This is multiple examples: [foo][a], [bar][A], [a].
+
+[a]: http://example.com/ "Optional Title Here"
+"""
+ var exp = """<p>This is multiple examples: <a href="http://example.com/" title="Optional Title Here">foo</a>, <a href="http://example.com/" title="Optional Title Here">bar</a>, <a href="http://example.com/" title="Optional Title Here">a</a>.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_link6 do
+ var test = """
+I get 10 times more traffic from [Google][] than from [Yahoo][] or [MSN][].
+
+[Google]: http://google.com/ "Google"
+[Yahoo]: http://search.yahoo.com/ "Yahoo Search"
+[MSN]: http://search.msn.com/ "MSN Search"
+"""
+ var exp = """<p>I get 10 times more traffic from <a href="http://google.com/" title="Google">Google</a> than from <a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_link7 do
+ var test = """
+Visit [Daring Fireball][] for more information.
+
+[Daring Fireball]: http://daringfireball.net/
+"""
+ var exp = """<p>Visit <a href="http://daringfireball.net/">Daring Fireball</a> for more information.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_link8 do
+ var test = """
+This one has a [line
+break].
+
+This one has a [line
+break] with a line-ending space.
+
+[line break]: /foo
+"""
+ var exp = """
+<p>This one has a <a href="/foo">line
+break</a>.</p>
+<p>This one has a <a href="/foo">line
+break</a> with a line-ending space.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ # FIXME unignore test once escape strings fixed
+ # fun test_process_link9 do
+ # var test = """
+ # Foo [bar][].
+ #
+ # Foo [bar](/url/ "Title with \"quotes\" inside").
+ #
+ #
+ # [bar]: /url/ "Title with \"quotes\" inside"
+ # """
+ # var exp = """
+ # <p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
+ # <p>Foo <a href="/url/" title="Title with "quotes" inside">bar</a>.</p>
+ # """
+ # var res = test.md_to_html.write_to_string
+ # assert res == exp
+ # end
+
+ fun test_process_img1 do
+ var test = """
+![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+"""
+ var exp = """<p><img src="/path/to/img.jpg" alt="Alt text"/></p>
+<p><img src="/path/to/img.jpg" alt="Alt text" title="Optional title"/></p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_process_img2 do
+ var test = """
+![Alt text][id]
+
+[id]: url/to/image "Optional title attribute"
+"""
+ var exp = """<p><img src="url/to/image" alt="Alt text" title="Optional title attribute"/></p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_encoding do
+ var test = """
+AT&T has an ampersand in their name.
+
+AT&T is another way to write it.
+
+This & that.
+
+4 < 5.
+
+6 > 5.
+
+Here's a [link] [1] with an ampersand in the URL.
+
+Here's a link with an amersand in the link text: [AT&T] [2].
+
+Here's an inline [link](/script?foo=1&bar=2).
+
+Here's an inline [link](</script?foo=1&bar=2>).
+
+
+[1]: http://example.com/?foo=1&bar=2
+[2]: http://att.com/ "AT&T"
+"""
+
+ var exp = """
+<p>AT&T has an ampersand in their name.</p>
+<p>AT&T is another way to write it.</p>
+<p>This & that.</p>
+<p>4 < 5.</p>
+<p>6 > 5.</p>
+<p>Here's a <a href="http://example.com/?foo=1&bar=2">link</a> with an ampersand in the URL.</p>
+<p>Here's a link with an amersand in the link text: <a href="http://att.com/" title="AT&T">AT&T</a>.</p>
+<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
+<p>Here's an inline <a href="/script?foo=1&bar=2">link</a>.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+
+ end
+
+ fun test_daring_autolinks do
+ var test = """
+Link: <http://example.com/>.
+
+With an ampersand: <http://example.com/?foo=1&bar=2>
+
+* In a list?
+* <http://example.com/>
+* It should.
+
+> Blockquoted: <http://example.com/>
+
+Auto-links should not occur here: `<http://example.com/>`
+
+ or here: <http://example.com/>
+"""
+
+ var exp = """
+<p>Link: <a href="http://example.com/">http://example.com/</a>.</p>
+<p>With an ampersand: <a href="http://example.com/?foo=1&bar=2">http://example.com/?foo=1&bar=2</a></p>
+<ul>
+<li>In a list?</li>
+<li><a href="http://example.com/">http://example.com/</a></li>
+<li>It should.</li>
+</ul>
+<blockquote>
+<p>Blockquoted: <a href="http://example.com/">http://example.com/</a></p>
+</blockquote>
+<p>Auto-links should not occur here: <code><http://example.com/></code></p>
+<pre><code>or here: <http://example.com/>
+</code></pre>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_escape do
+ var test = """
+These should all get escaped:
+
+Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \>
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+
+
+These should not, because they occur within a code block:
+
+ Backslash: \\
+
+ Backtick: \`
+
+ Asterisk: \*
+
+ Underscore: \_
+
+ Left brace: \{
+
+ Right brace: \}
+
+ Left bracket: \[
+
+ Right bracket: \]
+
+ Left paren: \(
+
+ Right paren: \)
+
+ Greater-than: \>
+
+ Hash: \#
+
+ Period: \.
+
+ Bang: \!
+
+ Plus: \+
+
+ Minus: \-
+
+Nor should these, which occur in code spans:
+
+Backslash: `\\`
+
+Backtick: `` \` ``
+
+Asterisk: `\*`
+
+Underscore: `\_`
+
+Left brace: `\{`
+
+Right brace: `\}`
+
+Left bracket: `\[`
+
+Right bracket: `\]`
+
+Left paren: `\(`
+
+Right paren: `\)`
+
+Greater-than: `\>`
+
+Hash: `\#`
+
+Period: `\.`
+
+Bang: `\!`
+
+Plus: `\+`
+
+Minus: `\-`
+
+These should get escaped, even though they're matching pairs for
+other Markdown constructs:
+
+\\\*asterisks\\\*
+
+\\\_underscores\\\_
+
+\\\`backticks\\\`
+
+This is a code span with a literal backslash-backtick sequence: `` \` ``
+
+This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.
+
+This is a tag with backslashes <span attr='\\\\backslashes\\\\'>bar</span>.
+"""
+ var exp = """
+<p>These should all get escaped:</p>
+<p>Backslash: \\</p>
+<p>Backtick: \`</p>
+<p>Asterisk: \*</p>
+<p>Underscore: \_</p>
+<p>Left brace: \{</p>
+<p>Right brace: \}</p>
+<p>Left bracket: \[</p>
+<p>Right bracket: \]</p>
+<p>Left paren: \(</p>
+<p>Right paren: \)</p>
+<p>Greater-than: \></p>
+<p>Hash: \#</p>
+<p>Period: \.</p>
+<p>Bang: \!</p>
+<p>Plus: \+</p>
+<p>Minus: \-</p>
+<p>These should not, because they occur within a code block:</p>
+<pre><code>Backslash: \\
+
+Backtick: \`
+
+Asterisk: \*
+
+Underscore: \_
+
+Left brace: \{
+
+Right brace: \}
+
+Left bracket: \[
+
+Right bracket: \]
+
+Left paren: \(
+
+Right paren: \)
+
+Greater-than: \>
+
+Hash: \#
+
+Period: \.
+
+Bang: \!
+
+Plus: \+
+
+Minus: \-
+</code></pre>
+<p>Nor should these, which occur in code spans:</p>
+<p>Backslash: <code>\\</code></p>
+<p>Backtick: <code>\`</code></p>
+<p>Asterisk: <code>\*</code></p>
+<p>Underscore: <code>\_</code></p>
+<p>Left brace: <code>\{</code></p>
+<p>Right brace: <code>\}</code></p>
+<p>Left bracket: <code>\[</code></p>
+<p>Right bracket: <code>\]</code></p>
+<p>Left paren: <code>\(</code></p>
+<p>Right paren: <code>\)</code></p>
+<p>Greater-than: <code>\></code></p>
+<p>Hash: <code>\#</code></p>
+<p>Period: <code>\.</code></p>
+<p>Bang: <code>\!</code></p>
+<p>Plus: <code>\+</code></p>
+<p>Minus: <code>\-</code></p>
+<p>These should get escaped, even though they're matching pairs for
+other Markdown constructs:</p>
+<p>*asterisks*</p>
+<p>_underscores_</p>
+<p>`backticks`</p>
+<p>This is a code span with a literal backslash-backtick sequence: <code>\`</code></p>
+<p>This is a tag with unescaped backticks <span attr='`ticks`'>bar</span>.</p>
+<p>This is a tag with backslashes <span attr='\\\\backslashes\\\\'>bar</span>.</p>
+"""
+
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_blockquotes do
+ var test = """
+> Example:
+>
+> sub status {
+> print "working";
+> }
+>
+> Or:
+>
+> sub status {
+> return "working";
+> }
+"""
+
+ var exp = """
+<blockquote>
+<p>Example:</p>
+<pre><code>sub status {
+ print "working";
+}
+</code></pre>
+<p>Or:</p>
+<pre><code>sub status {
+ return "working";
+}
+</code></pre>
+</blockquote>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_code_blocks do
+ var test = """
+ code block on the first line
+
+Regular text.
+
+ code block indented by spaces
+
+Regular text.
+
+ the lines in this block
+ all contain trailing spaces
+
+Regular Text.
+
+ code block on the last line
+"""
+
+ var exp = """
+<pre><code>code block on the first line
+</code></pre>
+<p>Regular text.</p>
+<pre><code>code block indented by spaces
+</code></pre>
+<p>Regular text.</p>
+<pre><code>the lines in this block
+all contain trailing spaces
+</code></pre>
+<p>Regular Text.</p>
+<pre><code>code block on the last line
+</code></pre>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_code_spans do
+ var test = """
+`<test a="` content of attribute `">`
+
+Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span>
+
+Here's how you put `` `backticks` `` in a code span.
+"""
+
+ var exp = """
+<p><code><test a="</code> content of attribute <code>"></code></p>
+<p>Fix for backticks within HTML tag: <span attr='`ticks`'>like this</span></p>
+<p>Here's how you put <code>`backticks`</code> in a code span.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_pars do
+ var test = """
+In Markdown 1.0.0 and earlier. Version
+8. This line turns into a list item.
+Because a hard-wrapped line in the
+middle of a paragraph looked like a
+list item.
+
+Here's one with a bullet.
+* criminey.
+"""
+
+ var exp = """
+<p>In Markdown 1.0.0 and earlier. Version
+8. This line turns into a list item.
+Because a hard-wrapped line in the
+middle of a paragraph looked like a
+list item.</p>
+<p>Here's one with a bullet.
+* criminey.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_rules do
+ var test = """
+Dashes:
+
+---
+
+ ---
+
+ ---
+
+ ---
+
+ ---
+
+- - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+ - - -
+
+
+Asterisks:
+
+***
+
+ ***
+
+ ***
+
+ ***
+
+ ***
+
+* * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+ * * *
+
+
+Underscores:
+
+___
+
+ ___
+
+ ___
+
+ ___
+
+ ___
+
+_ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
+
+ _ _ _
+"""
+
+ var exp = """
+<p>Dashes:</p>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>---
+</code></pre>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>- - -
+</code></pre>
+<p>Asterisks:</p>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>***
+</code></pre>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>* * *
+</code></pre>
+<p>Underscores:</p>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>___
+</code></pre>
+<hr/>
+<hr/>
+<hr/>
+<hr/>
+<pre><code>_ _ _
+</code></pre>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_images do
+ var test = """
+![Alt text](/path/to/img.jpg)
+
+![Alt text](/path/to/img.jpg "Optional title")
+
+Inline within a paragraph: [alt text](/url/).
+
+![alt text](/url/ "title preceded by two spaces")
+
+![alt text](/url/ "title has spaces afterward" )
+
+![alt text](</url/>)
+
+![alt text](</url/> "with a title").
+
+![Empty]()
+
+![this is a stupid URL](http://example.com/(parens).jpg)
+
+
+![alt text][foo]
+
+ [foo]: /url/
+
+![alt text][bar]
+
+ [bar]: /url/ "Title here"
+"""
+
+ var exp = """
+<p><img src="/path/to/img.jpg" alt="Alt text"/></p>
+<p><img src="/path/to/img.jpg" alt="Alt text" title="Optional title"/></p>
+<p>Inline within a paragraph: <a href="/url/">alt text</a>.</p>
+<p><img src="/url/" alt="alt text" title="title preceded by two spaces"/></p>
+<p><img src="/url/" alt="alt text" title="title has spaces afterward"/></p>
+<p><img src="/url/" alt="alt text"/></p>
+<p><img src="/url/" alt="alt text" title="with a title"/>.</p>
+<p><img src="" alt="Empty"/></p>
+<p><img src="http://example.com/(parens).jpg" alt="this is a stupid URL"/></p>
+<p><img src="/url/" alt="alt text"/></p>
+<p><img src="/url/" alt="alt text" title="Title here"/></p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_inline_html1 do
+ var test = """
+Here's a simple block:
+
+<div>
+ foo
+</div>
+
+This should be a code block, though:
+
+ <div>
+ foo
+ </div>
+
+As should this:
+
+ <div>foo</div>
+
+Now, nested:
+
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+
+This should just be an HTML comment:
+
+<!-- Comment -->
+
+Multiline:
+
+<!--
+Blah
+Blah
+-->
+
+Code block:
+
+ <!-- Comment -->
+
+Just plain comment, with trailing spaces on the line:
+
+<!-- foo -->
+
+Code:
+
+ <hr />
+
+Hr's:
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr>
+
+<hr/>
+
+<hr />
+
+<hr class="foo" id="bar" />
+
+<hr class="foo" id="bar"/>
+
+<hr class="foo" id="bar" >
+"""
+
+ var exp = """
+<p>Here's a simple block:</p>
+<div>
+ foo
+</div>
+<p>This should be a code block, though:</p>
+<pre><code><div>
+ foo
+</div>
+</code></pre>
+<p>As should this:</p>
+<pre><code><div>foo</div>
+</code></pre>
+<p>Now, nested:</p>
+<div>
+ <div>
+ <div>
+ foo
+ </div>
+ </div>
+</div>
+<p>This should just be an HTML comment:</p>
+<!-- Comment -->
+<p>Multiline:</p>
+<!--
+Blah
+Blah
+-->
+<p>Code block:</p>
+<pre><code><!-- Comment -->
+</code></pre>
+<p>Just plain comment, with trailing spaces on the line:</p>
+<!-- foo -->
+<p>Code:</p>
+<pre><code><hr />
+</code></pre>
+<p>Hr's:</p>
+<hr>
+<hr/>
+<hr />
+<hr>
+<hr/>
+<hr />
+<hr class="foo" id="bar" />
+<hr class="foo" id="bar"/>
+<hr class="foo" id="bar" >
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_inline_html2 do
+ var test = """
+Simple block on one line:
+
+<div>foo</div>
+
+And nested without indentation:
+
+<div>
+<div>
+<div>
+foo
+</div>
+<div style=">"/>
+</div>
+<div>bar</div>
+</div>
+
+And with attributes:
+
+<div>
+ <div id="foo">
+ </div>
+</div>
+
+This was broken in 1.0.2b7:
+
+<div class="inlinepage">
+<div class="toggleableend">
+foo
+</div>
+</div>
+"""
+
+ var exp = """
+<p>Simple block on one line:</p>
+<div>foo</div>
+<p>And nested without indentation:</p>
+<div>
+<div>
+<div>
+foo
+</div>
+<div style=">"/>
+</div>
+<div>bar</div>
+</div>
+<p>And with attributes:</p>
+<div>
+ <div id="foo">
+ </div>
+</div>
+<p>This was broken in 1.0.2b7:</p>
+<div class="inlinepage">
+<div class="toggleableend">
+foo
+</div>
+</div>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_inline_html3 do
+ var test = """
+Paragraph one.
+
+<!-- This is a simple comment -->
+
+<!--
+ This is another comment.
+-->
+
+Paragraph two.
+
+<!-- one comment block -- -- with two comments -->
+
+The end.
+"""
+
+ var exp = """
+<p>Paragraph one.</p>
+<!-- This is a simple comment -->
+<!--
+ This is another comment.
+-->
+<p>Paragraph two.</p>
+<!-- one comment block -- -- with two comments -->
+<p>The end.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_links1 do
+ var test = """
+Just a [URL](/url/).
+
+[URL and title](/url/ "title").
+
+[URL and title](/url/ "title preceded by two spaces").
+
+[URL and title](/url/ "title preceded by a tab").
+
+[URL and title](/url/ "title has spaces afterward" ).
+
+[URL wrapped in angle brackets](</url/>).
+
+[URL w/ angle brackets + title](</url/> "Here's the title").
+
+[Empty]().
+
+[With parens in the URL](http://en.wikipedia.org/wiki/WIMP_(computing))
+
+(With outer parens and [parens in url](/foo(bar)))
+
+
+[With parens in the URL](/foo(bar) "and a title")
+
+(With outer parens and [parens in url](/foo(bar) "and a title"))
+"""
+
+ var exp = """
+<p>Just a <a href="/url/">URL</a>.</p>
+<p><a href="/url/" title="title">URL and title</a>.</p>
+<p><a href="/url/" title="title preceded by two spaces">URL and title</a>.</p>
+<p><a href="/url/" title="title preceded by a tab">URL and title</a>.</p>
+<p><a href="/url/" title="title has spaces afterward">URL and title</a>.</p>
+<p><a href="/url/">URL wrapped in angle brackets</a>.</p>
+<p><a href="/url/" title="Here's the title">URL w/ angle brackets + title</a>.</p>
+<p><a href="">Empty</a>.</p>
+<p><a href="http://en.wikipedia.org/wiki/WIMP_(computing)">With parens in the URL</a></p>
+<p>(With outer parens and <a href="/foo(bar)">parens in url</a>)</p>
+<p><a href="/foo(bar)" title="and a title">With parens in the URL</a></p>
+<p>(With outer parens and <a href="/foo(bar)" title="and a title">parens in url</a>)</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_links2 do
+ var test = """
+Foo [bar] [1].
+
+Foo [bar][1].
+
+Foo [bar]
+[1].
+
+[1]: /url/ "Title"
+
+
+With [embedded [brackets]] [b].
+
+
+Indented [once][].
+
+Indented [twice][].
+
+Indented [thrice][].
+
+Indented [four][] times.
+
+ [once]: /url
+
+ [twice]: /url
+
+ [thrice]: /url
+
+ [four]: /url
+
+
+[b]: /url/
+
+* * *
+
+[this] [this] should work
+
+So should [this][this].
+
+And [this] [].
+
+And [this][].
+
+And [this].
+
+But not [that] [].
+
+Nor [that][].
+
+Nor [that].
+
+[Something in brackets like [this][] should work]
+
+[Same with [this].]
+
+In this case, [this](/somethingelse/) points to something else.
+
+Backslashing should suppress \\\[this] and [this\\\].
+
+[this]: foo
+
+
+* * *
+
+Here's one where the [link
+breaks] across lines.
+
+Here's another where the [link
+breaks] across lines, but with a line-ending space.
+
+
+[link breaks]: /url/
+"""
+
+ var exp = """
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+<p>Foo <a href="/url/" title="Title">bar</a>.</p>
+<p>With <a href="/url/">embedded [brackets]</a>.</p>
+<p>Indented <a href="/url">once</a>.</p>
+<p>Indented <a href="/url">twice</a>.</p>
+<p>Indented <a href="/url">thrice</a>.</p>
+<p>Indented [four][] times.</p>
+<pre><code>[four]: /url
+</code></pre>
+<hr/>
+<p><a href="foo">this</a> should work</p>
+<p>So should <a href="foo">this</a>.</p>
+<p>And <a href="foo">this</a>.</p>
+<p>And <a href="foo">this</a>.</p>
+<p>And <a href="foo">this</a>.</p>
+<p>But not [that] [].</p>
+<p>Nor [that][].</p>
+<p>Nor [that].</p>
+<p>[Something in brackets like <a href="foo">this</a> should work]</p>
+<p>[Same with <a href="foo">this</a>.]</p>
+<p>In this case, <a href="/somethingelse/">this</a> points to something else.</p>
+<p>Backslashing should suppress [this] and [this].</p>
+<hr/>
+<p>Here's one where the <a href="/url/">link
+breaks</a> across lines.</p>
+<p>Here's another where the <a href="/url/">link
+breaks</a> across lines, but with a line-ending space.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_links3 do
+ var test = """
+This is the [simple case].
+
+[simple case]: /simple
+
+
+
+This one has a [line
+break].
+
+This one has a [line
+break] with a line-ending space.
+
+[line break]: /foo
+
+
+[this] [that] and the [other]
+
+[this]: /this
+[that]: /that
+[other]: /other
+"""
+
+ var exp = """
+<p>This is the <a href="/simple">simple case</a>.</p>
+<p>This one has a <a href="/foo">line
+break</a>.</p>
+<p>This one has a <a href="/foo">line
+break</a> with a line-ending space.</p>
+<p><a href="/that">this</a> and the <a href="/other">other</a></p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_nested do
+ var test = """
+> foo
+>
+> > bar
+>
+> foo
+"""
+
+ var exp = """
+<blockquote>
+<p>foo</p>
+<blockquote>
+<p>bar</p>
+</blockquote>
+<p>foo</p>
+</blockquote>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_list do
+ var test = """
+## Unordered
+
+Asterisks tight:
+
+* asterisk 1
+* asterisk 2
+* asterisk 3
+
+
+Asterisks loose:
+
+* asterisk 1
+
+* asterisk 2
+
+* asterisk 3
+
+* * *
+
+Pluses tight:
+
++ Plus 1
++ Plus 2
++ Plus 3
+
+
+Pluses loose:
+
++ Plus 1
+
++ Plus 2
+
++ Plus 3
+
+* * *
+
+
+Minuses tight:
+
+- Minus 1
+- Minus 2
+- Minus 3
+
+
+Minuses loose:
+
+- Minus 1
+
+- Minus 2
+
+- Minus 3
+
+
+## Ordered
+
+Tight:
+
+1. First
+2. Second
+3. Third
+
+and:
+
+1. One
+2. Two
+3. Three
+
+
+Loose using tabs:
+
+1. First
+
+2. Second
+
+3. Third
+
+and using spaces:
+
+1. One
+
+2. Two
+
+3. Three
+
+Multiple paragraphs:
+
+1. Item 1, graf one.
+
+ Item 2. graf two. The quick brown fox jumped over the lazy dog's
+ back.
+
+2. Item 2.
+
+3. Item 3.
+
+
+
+## Nested
+
+* Tab
+ * Tab
+ * Tab
+
+Here's another:
+
+1. First
+2. Second:
+ * Fee
+ * Fie
+ * Foe
+3. Third
+
+Same thing but with paragraphs:
+
+1. First
+
+2. Second:
+ * Fee
+ * Fie
+ * Foe
+
+3. Third
+"""
+
+ var exp = """
+<h2 id="Unordered">Unordered</h2>
+<p>Asterisks tight:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+<p>Asterisks loose:</p>
+<ul>
+<li><p>asterisk 1</p>
+</li>
+<li><p>asterisk 2</p>
+</li>
+<li><p>asterisk 3</p>
+</li>
+</ul>
+<hr/>
+<p>Pluses tight:</p>
+<ul>
+<li>Plus 1</li>
+<li>Plus 2</li>
+<li>Plus 3</li>
+</ul>
+<p>Pluses loose:</p>
+<ul>
+<li><p>Plus 1</p>
+</li>
+<li><p>Plus 2</p>
+</li>
+<li><p>Plus 3</p>
+</li>
+</ul>
+<hr/>
+<p>Minuses tight:</p>
+<ul>
+<li>Minus 1</li>
+<li>Minus 2</li>
+<li>Minus 3</li>
+</ul>
+<p>Minuses loose:</p>
+<ul>
+<li><p>Minus 1</p>
+</li>
+<li><p>Minus 2</p>
+</li>
+<li><p>Minus 3</p>
+</li>
+</ul>
+<h2 id="Ordered">Ordered</h2>
+<p>Tight:</p>
+<ol>
+<li>First</li>
+<li>Second</li>
+<li>Third</li>
+</ol>
+<p>and:</p>
+<ol>
+<li>One</li>
+<li>Two</li>
+<li>Three</li>
+</ol>
+<p>Loose using tabs:</p>
+<ol>
+<li><p>First</p>
+</li>
+<li><p>Second</p>
+</li>
+<li><p>Third</p>
+</li>
+</ol>
+<p>and using spaces:</p>
+<ol>
+<li><p>One</p>
+</li>
+<li><p>Two</p>
+</li>
+<li><p>Three</p>
+</li>
+</ol>
+<p>Multiple paragraphs:</p>
+<ol>
+<li><p>Item 1, graf one.</p>
+<p>Item 2. graf two. The quick brown fox jumped over the lazy dog's
+back.</p>
+</li>
+<li><p>Item 2.</p>
+</li>
+<li><p>Item 3.</p>
+</li>
+</ol>
+<h2 id="Nested">Nested</h2>
+<ul>
+<li>Tab<ul>
+<li>Tab<ul>
+<li>Tab</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<p>Here's another:</p>
+<ol>
+<li>First</li>
+<li>Second:<ul>
+<li>Fee</li>
+<li>Fie</li>
+<li>Foe</li>
+</ul>
+</li>
+<li>Third</li>
+</ol>
+<p>Same thing but with paragraphs:</p>
+<ol>
+<li><p>First</p>
+</li>
+<li><p>Second:</p>
+<ul>
+<li>Fee</li>
+<li>Fie</li>
+<li>Foe</li>
+</ul>
+</li>
+<li><p>Third</p>
+</li>
+</ol>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_strong_em do
+ var test = """
+***This is strong and em.***
+
+So is ***this*** word.
+
+___This is strong and em.___
+
+So is ___this___ word.
+"""
+
+ var exp = """
+<p><strong><em>This is strong and em.</em></strong></p>
+<p>So is <strong><em>this</em></strong> word.</p>
+<p><strong><em>This is strong and em.</em></strong></p>
+<p>So is <strong><em>this</em></strong> word.</p>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_tabs do
+ var test = """
++ this is a list item
+ indented with tabs
+
++ this is a list item
+ indented with spaces
+
+Code:
+
+ this code block is indented by one tab
+
+And:
+
+ this code block is indented by two tabs
+
+And:
+
+ + this is an example list item
+ indented with tabs
+
+ + this is an example list item
+ indented with spaces
+"""
+
+ var exp = """
+<ul>
+<li><p>this is a list item
+indented with tabs</p>
+</li>
+<li><p>this is a list item
+indented with spaces</p>
+</li>
+</ul>
+<p>Code:</p>
+<pre><code>this code block is indented by one tab
+</code></pre>
+<p>And:</p>
+<pre><code> this code block is indented by two tabs
+</code></pre>
+<p>And:</p>
+<pre><code>+ this is an example list item
+ indented with tabs
+
++ this is an example list item
+ indented with spaces
+</code></pre>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+ fun test_daring_tidyness do
+ var test = """
+> A list within a blockquote:
+>
+> * asterisk 1
+> * asterisk 2
+> * asterisk 3
+"""
+
+ var exp = """
+<blockquote>
+<p>A list within a blockquote:</p>
+<ul>
+<li>asterisk 1</li>
+<li>asterisk 2</li>
+<li>asterisk 3</li>
+</ul>
+</blockquote>
+"""
+ var res = test.md_to_html.write_to_string
+ assert res == exp
+ end
+
+
+end
+
+class TestBlock
+ super TestSuite
+
+ fun test_has_blocks do
+ var subject = new MDBlock
+ assert not subject.has_blocks
+ subject.first_block = new MDBlock
+ assert subject.has_blocks
+ end
+
+ fun test_count_blocks do
+ var subject = new MDBlock
+ assert subject.count_blocks == 0
+ subject.first_block = new MDBlock
+ assert subject.count_blocks == 1
+ subject.first_block.next = new MDBlock
+ assert subject.count_blocks == 2
+ end
+
+ fun test_has_lines do
+ var subject = new MDBlock
+ assert not subject.has_lines
+ subject.first_line = new MDLine("")
+ assert subject.has_lines
+ end
+
+ fun test_count_lines do
+ var subject = new MDBlock
+ assert subject.count_lines == 0
+ subject.first_line = new MDLine("")
+ assert subject.count_lines == 1
+ subject.first_line.next = new MDLine("")
+ assert subject.count_lines == 2
+ end
+
+ fun test_split do
+ var line1 = new MDLine("line1")
+ var line2 = new MDLine("line2")
+ var line3 = new MDLine("line3")
+ var subject = new MDBlock
+ subject.add_line line1
+ subject.add_line line2
+ subject.add_line line3
+ var block = subject.split(line2)
+ assert subject.count_blocks == 1
+ assert subject.count_lines == 1
+ assert subject.first_line == line3
+ assert block.count_blocks == 0
+ assert block.count_lines == 2
+ assert block.first_line == line1
+ assert block.last_line == line2
+ end
+
+ fun test_add_line do
+ var subject = new MDBlock
+ assert subject.count_lines == 0
+ subject.add_line new MDLine("")
+ assert subject.count_lines == 1
+ subject.add_line new MDLine("")
+ assert subject.count_lines == 2
+ end
+
+ fun test_remove_line do
+ var line1 = new MDLine("line1")
+ var line2 = new MDLine("line2")
+ var line3 = new MDLine("line3")
+ var subject = new MDBlock
+ subject.add_line line1
+ subject.add_line line2
+ subject.add_line line3
+ subject.remove_line(line2)
+ assert subject.count_lines == 2
+ subject.remove_line(line1)
+ assert subject.count_lines == 1
+ assert subject.first_line == line3
+ assert subject.last_line == line3
+ end
+
+ fun test_transform_headline1 do
+ var subject = new MDBlock
+ var kind = new BlockHeadline(subject)
+ subject.add_line new MDLine(" # Title 1 ")
+ kind.transform_headline(subject)
+ assert kind.depth == 1
+ assert subject.first_line.value == "Title 1"
+ end
+
+ fun test_transform_headline2 do
+ var subject = new MDBlock
+ var kind = new BlockHeadline(subject)
+ subject.add_line new MDLine(" #####Title 5 ")
+ kind.transform_headline(subject)
+ assert kind.depth == 5
+ assert subject.first_line.value == "Title 5"
+ end
+
+ fun test_remove_quote_prefix do
+ var subject = new MDBlock
+ var kind = new BlockQuote(subject)
+ subject.add_line new MDLine(" > line 1")
+ subject.add_line new MDLine(" > line 2")
+ subject.add_line new MDLine(" > line 3")
+ kind.remove_block_quote_prefix(subject)
+ assert subject.first_line.value == "line 1"
+ assert subject.first_line.next.value == "line 2"
+ assert subject.first_line.next.next.value == "line 3"
+ end
+
+ fun test_remove_leading_empty_lines_1 do
+ var block = new MDBlock
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ block.add_line new MDLine(" text")
+ block.add_line new MDLine("")
+ assert block.remove_leading_empty_lines
+ assert block.first_line.value == " text"
+ end
+
+ fun test_remove_leading_empty_lines_2 do
+ var block = new MDBlock
+ block.add_line new MDLine(" text")
+ block.remove_leading_empty_lines
+ assert block.first_line.value == " text"
+ end
+
+ fun test_remove_trailing_empty_lines_1 do
+ var block = new MDBlock
+ block.add_line new MDLine("")
+ block.add_line new MDLine("text")
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ assert block.remove_trailing_empty_lines
+ assert block.last_line.value == "text"
+ end
+
+ fun test_remove_trailing_empty_lines_2 do
+ var block = new MDBlock
+ block.add_line new MDLine("text ")
+ assert not block.remove_trailing_empty_lines
+ assert block.last_line.value == "text "
+ end
+
+ fun test_remove_surrounding_empty_lines do
+ var block = new MDBlock
+ block.add_line new MDLine("")
+ block.add_line new MDLine("text")
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ block.add_line new MDLine("")
+ assert block.remove_surrounding_empty_lines
+ assert block.first_line.value == "text"
+ assert block.last_line.value == "text"
+ end
+end
+
+class TestLine
+ super TestSuite
+
+ var subject: MDLine
+
+ init do end
+
+ fun test_is_empty do
+ subject = new MDLine("")
+ assert subject.is_empty
+ subject = new MDLine(" ")
+ assert subject.is_empty
+ subject = new MDLine("test")
+ assert not subject.is_empty
+ subject = new MDLine(" test")
+ assert not subject.is_empty
+ end
+
+ fun test_leading do
+ subject = new MDLine("")
+ assert subject.leading == 0
+ subject = new MDLine(" ")
+ assert subject.leading == 4
+ subject = new MDLine("test")
+ assert subject.leading == 0
+ subject = new MDLine(" test")
+ assert subject.leading == 4
+ end
+
+ fun test_trailing do
+ subject = new MDLine("")
+ assert subject.trailing == 0
+ subject = new MDLine(" ")
+ assert subject.trailing == 0
+ subject = new MDLine("test ")
+ assert subject.trailing == 3
+ subject = new MDLine(" test ")
+ assert subject.trailing == 1
+ end
+
+ fun test_line_type do
+ var v = new MarkdownProcessor
+ subject = new MDLine("")
+ assert subject.kind(v) isa LineEmpty
+ subject = new MDLine(" ")
+ assert subject.kind(v) isa LineEmpty
+ subject = new MDLine("text ")
+ assert subject.kind(v) isa LineOther
+ subject = new MDLine(" # Title")
+ assert subject.kind(v) isa LineHeadline
+ subject = new MDLine(" ### Title")
+ assert subject.kind(v) isa LineHeadline
+ subject = new MDLine(" code")
+ assert subject.kind(v) isa LineCode
+ subject = new MDLine(" ~~~")
+ assert subject.kind(v) isa LineFence
+ subject = new MDLine(" ```")
+ assert subject.kind(v) isa LineFence
+ subject = new MDLine(" Title ")
+ subject.next = new MDLine("== ")
+ assert subject.kind(v) isa LineHeadline1
+ subject = new MDLine(" Title ")
+ subject.next = new MDLine("-- ")
+ assert subject.kind(v) isa LineHeadline2
+ subject = new MDLine(" * * * ")
+ assert subject.kind(v) isa LineHR
+ subject = new MDLine(" *** ")
+ assert subject.kind(v) isa LineHR
+ subject = new MDLine("- -- ")
+ assert subject.kind(v) isa LineHR
+ subject = new MDLine("--------- ")
+ assert subject.kind(v) isa LineHR
+ subject = new MDLine(" >")
+ assert subject.kind(v) isa LineBlockquote
+ subject = new MDLine("<p></p>")
+ assert subject.kind(v) isa LineXML
+ subject = new MDLine("<p>")
+ assert subject.kind(v) isa LineOther
+ subject = new MDLine(" * foo")
+ assert subject.kind(v) isa LineUList
+ subject = new MDLine("- foo")
+ assert subject.kind(v) isa LineUList
+ subject = new MDLine("+ foo")
+ assert subject.kind(v) isa LineUList
+ subject = new MDLine("1. foo")
+ assert subject.kind(v) isa LineOList
+ subject = new MDLine(" 11111. foo")
+ assert subject.kind(v) isa LineOList
+ end
+
+ fun test_count_chars do
+ subject = new MDLine("")
+ assert subject.count_chars('*') == 0
+ subject = new MDLine("* ")
+ assert subject.count_chars('*') == 1
+ subject = new MDLine(" * text")
+ assert subject.count_chars('*') == 0
+ subject = new MDLine(" * * *")
+ assert subject.count_chars('*') == 3
+ subject = new MDLine("text ** ")
+ assert subject.count_chars('*') == 0
+ end
+
+ fun test_count_chars_start do
+ subject = new MDLine("")
+ assert subject.count_chars_start('*') == 0
+ subject = new MDLine("* ")
+ assert subject.count_chars_start('*') == 1
+ subject = new MDLine(" * text")
+ assert subject.count_chars_start('*') == 1
+ subject = new MDLine(" * * * text")
+ assert subject.count_chars_start('*') == 3
+ subject = new MDLine("text ** ")
+ assert subject.count_chars_start('*') == 0
+ end
+end
+
+class TestHTMLDecorator
+ super TestSuite
+
+ fun test_headlines do
+ var test = """
+# **a**
+## a.a
+### a.a.b
+### a.a.b
+## a.b
+# [b](test)
+## b.a
+### b.a.c
+## b.b
+## b.c
+# c
+"""
+ var proc = new MarkdownProcessor
+ var decorator = proc.emitter.decorator.as(HTMLDecorator)
+ proc.process(test)
+ var res = ""
+ for id, headline in decorator.headlines do
+ res += "{headline.title}:{id}\n"
+ end
+ var exp = """
+**a**:a
+a.a:a.a
+a.a.b:a.a.b
+a.a.b:a.a.b_1
+a.b:a.b
+[b](test):btest
+b.a:b.a
+b.a.c:b.a.c
+b.b:b.b
+b.c:b.c
+c:c
+"""
+ assert res == exp
+ end
+end
# Display to use by apps
# Is null if the display is not available or not yet ready
- var display: nullable D protected writable = null
+ var display: nullable D = null is protected writable
# Received quit order
- var quit: Bool writable = false
+ var quit: Bool = false is writable
# App is visible? (vs minimized or in background)
fun visible: Bool is abstract
# Zero (or a negative value) means no limit.
#
# Applications can modify this value even during the main-loop.
- var maximum_fps writable = 60
+ var maximum_fps = 60 is writable
# Current frame-rate
# Updated each 5 seconds.
super Image
var path: String
redef fun to_s do return path
- redef var scale redef writable = 1.0
+ redef var scale = 1.0 is redef writable
redef var width = 32
redef var height = 32
end
# Additional space to insert horizontally between characters
# A negave value will display tile overlaped
- var hspace: Int writable = 0
+ var hspace: Int = 0 is writable
# Additional space to insert vertically between characters
# A negave value will display tile overlaped
- var vspace: Int writable = 0
+ var vspace: Int = 0 is writable
# The glyph (tile) associated to the caracter `c` according to `chars`
# Returns null if `c` is not in `chars`
end
# OAuth token
- var auth: nullable String writable
+ var auth: nullable String is writable
# User agent (is used by github to contact devs in case of problems)
# Eg. "Awesome-Octocat-App"
- var user_agent: nullable String writable
+ var user_agent: nullable String is writable
# HTTP headers to send
- var headers: nullable HeaderMap writable = null
+ var headers: nullable HeaderMap = null is writable
# init HTTP headers for Neo4j REST API
class JsonPOST
super JsonCurlRequest
- var data: nullable Jsonable writable = null
+ var data: nullable Jsonable = null is writable
redef fun init_headers do
super
class JsonPUT
super JsonCurlRequest
- var data: nullable Jsonable writable = null
+ var data: nullable Jsonable = null is writable
redef fun init_headers do
super
# Should the parser stop
# Used by generated parsers
- var stop writable = true
+ var stop = true is writable
# Parse a full sequence of tokens and return a complete syntactic tree
fun parse: Node
end
# The position of the node in the input stream
- var position: nullable Position writable = null
+ var position: nullable Position = null is writable
# Produce a graphiz file for the syntaxtic tree rooted at `self`.
fun to_dot(filepath: String)
end
# The text associated with the token
- var text: String writable = ""
+ var text: String = "" is writable
redef fun to_s do
var res = super
import reactor
import sessions
import media_types
+import http_errors
redef class String
# Returns a `String` copy of `self` without any of the prefixed '/'s
class FileServer
super Action
- # Root of `self` file system
+ # Root folder of `self` file system
var root: String
+ init
+ do
+ var root = self.root
+
+ # Simplify the root path as each file requested will also be simplified
+ root = root.simplify_path
+
+ # Make sure the root ends with '/', this makes a difference in the security
+ # check on each file access.
+ root = root + "/"
+
+ self.root = root
+ end
+
+ # Error page template for a given `code`
+ fun error_page(code: Int): Streamable do return new ErrorTemplate(code)
+
+ # Header of each directory page
+ var header: nullable Streamable = null is writable
+
redef fun answer(request, turi)
do
var response
var local_file = root.join_path(turi.strip_start_slashes)
local_file = local_file.simplify_path
- # HACK
- if turi == "/" then local_file = root
-
# Is it reachable?
- if local_file.has_prefix(root) then
+ #
+ # This make sure that the requested file is within the root folder.
+ if (local_file + "/").has_prefix(root) then
# Does it exists?
if local_file.file_exists then
- response = new HttpResponse(200)
-
if local_file.file_stat.is_dir then
- # Show index.html instead of the directory listing
+ # If we target a directory without an ending `/`,
+ # redirect to the directory ending with `/`.
+ if not request.uri.is_empty and
+ request.uri.chars.last != '/' then
+ response = new HttpResponse(303)
+ response.header["Location"] = request.uri + "/"
+ return response
+ end
+
+ # Show index file instead of the directory listing
+ # only if `index.html` or `index.htm` is available
var index_file = local_file.join_path("index.html")
if index_file.file_exists then
local_file = index_file
end
end
+ response = new HttpResponse(200)
if local_file.file_stat.is_dir then
# Show the directory listing
var title = turi
var files = local_file.files
var links = new Array[String]
- if local_file.length > 1 then
- # The extra / is a hack
- var path = "/" + (turi + "/..").simplify_path
- links.add "<a href=\"{path}\">..</a>"
+ if turi.length > 1 then
+ var path = (request.uri + "/..").simplify_path
+ links.add "<a href=\"{path}/\">..</a>"
end
for file in files do
- var path = (turi + "/" + file).simplify_path
- links.add "<a href=\"{path}\">{file}</a>"
+ var local_path = local_file.join_path(file).simplify_path
+ var web_path = file.simplify_path
+ if local_path.file_stat.is_dir then web_path = web_path + "/"
+ links.add "<a href=\"{web_path}\">{file}</a>"
end
+ var header = self.header
+ var header_code
+ if header != null then
+ header_code = header.write_to_string
+ else header_code = ""
+
response.body = """
<!DOCTYPE html>
<head>
<title>{{{title}}}</title>
</head>
<body>
+ {{{header_code}}}
<div class="container">
<h1>{{{title}}}</h1>
<ul>
var ext = local_file.file_extension
if ext != null then
var media_type = media_types[ext]
- if media_type != null then response.header["Content-Type"] = media_type
+ if media_type != null then
+ response.header["Content-Type"] = media_type
+ else response.header["Content-Type"] = "application/octet-stream"
end
file.close
else response = new HttpResponse(404)
else response = new HttpResponse(403)
+ if response.status_code != 200 then
+ var tmpl = error_page(response.status_code)
+ if header != null and tmpl isa ErrorTemplate then tmpl.header = header
+ response.body = tmpl.to_s
+ end
+
return response
end
end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Offers `ErrorTemplate` to display error pages
+module http_errors
+
+import template
+
+import http_response
+
+# A basic error page for the HTTP error `code`
+class ErrorTemplate
+ super Template
+
+ # HTTP error code
+ var code: Int is writable
+
+ # Header on this page
+ var header: nullable Streamable = null is writable
+
+ # Body to show with this page
+ var body: nullable Streamable = null is writable
+
+ redef fun rendering
+ do
+ var code_message = http_status_codes[code]
+ var message
+ if code_message != null then
+ message = "Error {code}: {code_message}"
+ else message = "Error {code}"
+
+ add """
+<!DOCTYPE html>
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
+ <title>"""
+ add message
+ add """
+ </title>
+</head>
+<body>"""
+
+ var header = header
+ if header != null then add header
+
+ add """
+ <div class="container">
+ <h1>"""
+ add message
+ add "</h1>"
+
+ var body = body
+ if body != null then add body
+
+ add """
+ </div>
+</body>
+</html>"""
+ end
+
+ redef fun to_s do return write_to_string
+end
# The arguments passed with the POST method
var post_args = new HashMap[String, String]
+
+ # The arguments passed with the POST or GET method (with a priority on POST)
+ var all_args = new HashMap[String, String]
end
# Utility class to parse a request string and build a `HttpRequest`
if http_request.url.has('?') then
http_request.uri = first_line[1].substring(0, first_line[1].index_of('?'))
http_request.query_string = first_line[1].substring_from(first_line[1].index_of('?')+1)
+
+ var parse_url = parse_url
http_request.get_args = parse_url
+ http_request.all_args.recover_with parse_url
else
http_request.uri = first_line[1]
end
continue
end
http_request.post_args[parts[0]] = decoded
+ http_request.all_args[parts[0]] = decoded
else
print "POST Error: {line} format error on {line}"
end
types["asx"] = "video/x-ms-asf"
types["asf"] = "video/x-ms-asf"
types["mng"] = "video/x-mng"
+ types["apk"] = "application/vnd.android.package-archive"
end
end
end label
end
+ # Use default virtual host if none already responded
+ if virtual_host == null then virtual_host = factory.config.default_virtual_host
+
# Get a response from the virtual host
var response
if virtual_host != null then
# Server instance configuration
class ServerConfig
- # Virtual hosts list
+ # `VirtualHost`s served by this server
var virtual_hosts = new VirtualHosts(self)
- # TODO implement serialization or something like that
+ # Default `VirtualHost` to respond to requests not handled by any of the `virtual_hosts`
+ var default_virtual_host: nullable VirtualHost = null
end
# A `VirtualHost` configuration
var errors: Array[String] = new Array[String]
# Is this option mandatory?
- var mandatory: Bool writable = false
+ var mandatory: Bool = false is writable
# Is this option hidden from `usage`?
- var hidden: Bool writable = false
+ var hidden: Bool = false is writable
# Has this option been read?
- var read: Bool writable = false
+ var read: Bool = false is writable
# Current value of this option
- var value: VALUE writable
+ var value: VALUE is writable
# Default value of this option
- var default_value: VALUE writable
+ var default_value: VALUE is writable
# Create a new option
init(help: String, default: VALUE, names: nullable Array[String])
protected fun convert(str: String): VALUE is abstract
# Is the parameter mandatory?
- var parameter_mandatory: Bool writable = true
+ var parameter_mandatory: Bool = true is writable
redef fun read_param(it)
do
import standard
intrude import standard::stream
-`{
- #include <unistd.h>
- #include <stddef.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <pthread.h>
+in "C Header" `{
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/ppp.h"
#include "ppapi/c/ppp_instance.h"
#include "ppapi/c/ppp_messaging.h"
#include "ppapi/c/ppb_var_dictionary.h"
#include "ppapi/c/ppb_var_array.h"
+`}
+
+`{
+ #include <unistd.h>
+ #include <stddef.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <stdlib.h>
+ #include <pthread.h>
#define MAX_DICTIONARY_QUEUE_SIZE 200
#define MAX_MESSAGE_QUEUE_SIZE 10
fun update do end
# Controls whether `update' and `draw' are automatically called by `LiveGroup'
- var exists writable = true
+ var exists = true is writable
# Redefine this method to asks how to draw on a view
fun draw(view: View) is abstract
super LiveObject
# x coordinate of the center point
- var x: Int writable = 0
+ var x: Int = 0 is writable
# y coordinate of the center point
- var y: Int writable = 0
+ var y: Int = 0 is writable
# width of the sprite
- var width: Int writable = 100
+ var width: Int = 100 is writable
# height of the sprite
- var height: Int writable = 100
+ var height: Int = 100 is writable
fun left: Int do return x - width/2
fun right: Int do return x + width/2
fun bottom: Int do return y + height/2
# x velocity (applied by `update')
- var vx: Int writable = 0
+ var vx: Int = 0 is writable
# y velocity (applied by `update')
- var vy: Int writable = 0
+ var vy: Int = 0 is writable
redef fun update
do
init(e: E) do item = e
# The stored item
- var item: E writable
+ var item: E is writable
end
# This iterator is quite stupid since it is used for only one item.
class Couple[F, S]
# The first element of the couple.
- var first: F writable
+ var first: F is writable
# The second element of the couple.
- var second: S writable
+ var second: S is writable
# Create a new instance with a first and a second object.
init(f: F, s: S)
redef class Sys
# Standard input
- var stdin: PollableIStream protected writable = new Stdin
+ var stdin: PollableIStream = new Stdin is protected writable
# Standard output
- var stdout: OStream protected writable = new Stdout
+ var stdout: OStream = new Stdout is protected writable
# Standard output for errors
- var stderr: OStream protected writable = new Stderr
+ var stderr: OStream = new Stderr is protected writable
end
if self > o then return (self - o).rshift(1).gcd(o)
return (o - self).rshift(1).gcd(self)
end
+
+ # Is `self` even ?
+ #
+ # assert 12.is_even
+ fun is_even: Bool do return self % 2 == 0
+
+ # Is `self` odd ?
+ #
+ # assert not 13.is_even
+ fun is_odd: Bool do return not is_even
end
redef class Float
import string
-`{
+in "C Header" `{
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Regular expression support for all services based on `Pattern`
+#
+# Implemented using libc regular expressions.
+#
+# The main entities are `Text::to_re` and `Regex`.
+module re
+
+import string_search
+import gc
+import error
+
+in "C Header" `{
+ #include <sys/types.h>
+ #include <regex.h>
+`}
+
+# Main extern class to wrap libc regular expression support
+#
+# It is recommanded to use the higher level API offered by the class `Regex`,
+# but it can still be used for advanced purpose or in optimized code.
+#
+# To use this class and other `private` entities of this module, use `intrude import standard::re`
+private extern class NativeRegex `{ regex_t* `}
+ # Allocate a new `NativeRegex`, it must then be compiled using `regcomp` before calling `regexec`
+ new malloc `{ return malloc(sizeof(regex_t)); `}
+
+ # Compile the regular expression `regex` into a form that is suitable for subsequent `regexec` searches
+ fun regcomp(regex: NativeString, cflags: Int): Int `{
+ return regcomp(recv, regex, cflags);
+ `}
+
+ # Match `string` against the precompiled pattern buffer of `self`, locating matches
+ #
+ # `nmatch` and `pmatch` are used to provide information regarding the location of any matches.
+ # `eflags` may be the bitwise-or of one or both of `flag_notbol` and `flag_noteol`.
+ fun regexec(string: NativeString, nmatch: Int, pmatch: NativeMatchArray, eflags: Int): Int `{
+ return regexec(recv, string, nmatch, pmatch, eflags);
+ `}
+
+ # Match `string` against the precompiled pattern buffer of `self`, do not locate matches
+ #
+ # `eflags` may be the bitwise-or of one or both of `flag_notbol` and `flag_noteol`.
+ fun regexec_match_only(string: NativeString, eflags: Int): Int `{
+ return regexec(recv, string, 0, NULL, eflags);
+ `}
+
+ # Free the memory allocated to the pattern buffer by the compiling process
+ #
+ # Does not free the memory holding `self`, use `free` for this purpose.
+ fun regfree `{ regfree(recv); `}
+
+ # Turn the error codes that can be returned by both `regcomp` and `regexec` into error message strings
+ fun regerror(errcode: Int): NativeString `{
+ size_t len = regerror(errcode, recv, NULL, 0);
+ char *message = malloc(len);
+ regerror(errcode, recv, message, len);
+
+ return message;
+ `}
+
+ # This field holds the number of parenthetical subexpressions in the regular expression that was compiled.
+ fun re_nsub: Int `{ return recv->re_nsub; `}
+end
+
+# Flags for `NativeRegex::regcomp`
+
+private fun flag_extended: Int `{ return REG_EXTENDED; `}
+private fun flag_icase: Int `{ return REG_ICASE; `}
+private fun flag_nosub: Int `{ return REG_NOSUB; `}
+private fun flag_newline: Int `{ return REG_NEWLINE; `}
+
+# Flags for `NativeRegex::regexec`
+
+private fun flag_notbol: Int `{ return REG_NOTBOL; `}
+private fun flag_noteol: Int `{ return REG_NOTEOL; `}
+
+# Errors of `NativeRegex::regexec`
+
+private fun error_nomatch: Int `{ return REG_NOMATCH; `}
+private fun error_espace: Int `{ return REG_ESPACE; `}
+
+redef universal Int
+ private fun is_nomatch: Bool `{ return recv == REG_NOMATCH; `}
+end
+
+# An array of `regmatch_t` or a pointer to one
+private extern class NativeMatchArray `{ regmatch_t* `}
+ # Allocate a new array of `length` `regmatch_t`
+ new malloc(length: Int) `{ return malloc(length * sizeof(regmatch_t)); `}
+
+ # The offset in string of the beginning of a substring
+ fun rm_so: Int `{ return recv->rm_so; `}
+
+ # The offset in string of the end of the substring
+ fun rm_eo: Int `{ return recv->rm_eo; `}
+
+ # Get a pointer to the element at `index`, can also be used as a subarray
+ fun [](index: Int): NativeMatchArray `{ return recv + index; `}
+end
+
+redef extern class NativeString
+ private fun substring_from(index: Int): NativeString `{ return recv + index; `}
+end
+
+redef class Text
+ # Get a `Regex` instance from `self`
+ fun to_re: Regex do return new Regex(self.to_s)
+end
+
+# A regular expression pattern
+#
+# Used as a `Pattern` on intances of `Text` to call `has`, `search_all`, `replace`, etc.
+#
+# Example:
+#
+# var re = "ab+a".to_re
+# assert "aabbbbaaaaba".search_all(re).join(", ") == "abbbba, aba"
+# assert "aabbbbaaaaba".has(re)
+# assert "aabbbbaaaaba".replace(re, "+") == "a+aa+"
+# assert "aabbbbaaaaba".split(re) == ["a", "aa", ""]
+class Regex
+ super Finalizable
+ super Pattern
+
+ # The `String` source of this regular expression
+ var string: String is writable
+
+ # Treat the pattern as a POSIX extended regular expression (the default)
+ #
+ # If `false`, it is treated as a POSIX basic regular expression (BRE).
+ #
+ # The extended syntax supports `?`, `+` and `|`. Also, `\` causes the following
+ # character to be used as literal.
+ var extended = true is writable
+
+ # Ignore case when matching letters
+ var ignore_case = false is writable
+
+ # Optimize `self` for `is_in` and `String::has`, but do not support searches
+ #
+ # If `true`, `self` cannont be used with `String::search_all`, `String::replace`
+ # or `String::split`.
+ var optimize_is_in = false is writable
+
+ # Treat a newline in string as dividing string into multiple lines
+ #
+ # So that `$` can match before the newline and `^` can match after.
+ # Also, don’t permit `.` to match a newline, and don’t permit `[^…]` to match a newline.
+ #
+ # Otherwise, newline acts like any other ordinary character.
+ var newline = false is writable
+
+ # Do not regard the beginning of the specified string as the beginning of a line
+ #
+ # More generally, don’t make any assumptions about what text might precede it.
+ var not_bol = false is writable
+
+ # Do not regard the end of the specified string as the end of a line
+ #
+ # More generally, don’t make any assumptions about what text might follow it.
+ var not_eol = false is writable
+
+ # Cache of the last used compiled regular expression
+ private var native: nullable NativeRegex = null
+
+ # Cache of a single `regmatch_t` to prevent many calls to `malloc`
+ private var native_match = new NativeMatchArray.malloc(1) is lazy
+
+ # `cflags` of the last successful `compile`
+ private var cflags_cache = 0
+
+ # `string` of the last successful `compile`
+ private var string_cache: nullable String = null
+
+ # Compile the regular expression, if needed
+ #
+ # Return `null` on success and an `Error` otherwise.
+ #
+ # This method is always called by `get_match` and `has_match`, but the user
+ # should call it to check for errors.
+ #
+ # assert "ab".to_re.compile == null
+ # assert "[ab".to_re.compile.message == "Unmatched [ or [^"
+ fun compile: nullable Error
+ do
+ var cflags = 0
+ if extended then cflags = cflags.bin_or(flag_extended)
+ if ignore_case then cflags = cflags.bin_or(flag_icase)
+ if optimize_is_in then cflags = cflags.bin_or(flag_nosub)
+ if newline then cflags = cflags.bin_or(flag_newline)
+
+ var native = self.native
+ var need_compilation = native == null or cflags != cflags_cache or string != string_cache
+
+ if need_compilation then
+
+ # Initial allocation
+ if native == null then
+ native = new NativeRegex.malloc
+ self.native = native
+ end
+
+ var res = native.regcomp(string.to_cstring, cflags)
+
+ # All is good
+ if res == 0 then
+ # Update the cache
+ self.native = native
+
+ # We store these to know if we need to recompile or not
+ self.cflags_cache = cflags
+ self.string_cache = string
+
+ return null
+ end
+
+ var error_cstr = native.regerror(res)
+
+ # We leave it to the lib to decide how to allocate the string that we keep
+ var error_str = error_cstr.to_s_with_copy
+ error_cstr.free
+
+ return new Error(error_str)
+ end
+
+ return null
+ end
+
+ redef fun finalize
+ do
+ var native = self.native
+ if native != null then
+ native.regfree
+ native.free
+ self.native = null
+ self.native_match.free
+ end
+ end
+
+ private fun gather_eflags: Int
+ do
+ var eflags = 0
+ if not_bol then eflags = eflags.bin_or(flag_notbol)
+ if not_eol then eflags = eflags.bin_or(flag_noteol)
+ return eflags
+ end
+
+ private fun get_error(errcode: Int): String
+ do
+ # Error, should be out of memory but we cover any possible error anyway
+ var error_cstr = native.regerror(errcode)
+
+ # We leave it to the lib to decide how to allocate the string that we keep
+ var error_str = error_cstr.to_s_with_copy
+ error_cstr.free
+
+ return error_str
+ end
+
+ # assert "ab".to_re.is_in("abcd")
+ # assert "ab".to_re.is_in("cdab")
+ # assert not "ab".to_re.is_in("acdb")
+ # assert "ab".to_re.is_in("ab")
+ redef fun is_in(text)
+ do
+ var comp_res = compile
+ assert comp_res == null else "Regex compilation failed with: {comp_res.message}\n".output
+
+ # Actually execute
+ var eflags = gather_eflags
+ var res = native.regexec_match_only(text.to_cstring, eflags)
+
+ # Got a match?
+ if res == 0 then return true
+
+ # Got no match, not an error?
+ if res.is_nomatch then return false
+
+ # Error, should be out of memory but we cover any possible error anyway
+ var error_str = get_error(res)
+ "Regex search failed with: {error_str}\n".output
+ abort
+ end
+
+ # require: not optimize_is_in
+ #
+ # assert "l".to_re.search_index_in("hello world", 0) == 2
+ # assert "el+o".to_re.search_index_in("hello world", 0) == 1
+ # assert "l+".to_re.search_index_in("hello world", 3) == 3
+ # assert "z".to_re.search_index_in("hello world", 0) == -1
+ redef fun search_index_in(text, from)
+ do
+ assert not optimize_is_in
+
+ var comp_res = compile
+ assert comp_res == null else "Regex compilation failed with: {comp_res.message}\n".output
+
+ # Actually execute
+ text = text.to_s
+ var cstr = text.substring_from(from).to_cstring
+ var eflags = gather_eflags
+ var match = self.native_match
+
+ var res = native.regexec(cstr, 1, match, eflags)
+
+ # Found one?
+ if res == 0 then return match.rm_so + from
+
+ # No more match?
+ if res.is_nomatch then return -1
+
+ # Error, should be out of memory but we cover any possible error anyway
+ var error_str = get_error(res)
+ "Regex search failed with: {error_str}\n".output
+ abort
+ end
+
+ # require: not optimize_is_in
+ #
+ # assert "l".to_re.search_in("hello world", 0).from == 2
+ # assert "el+o".to_re.search_in("hello world", 0).from == 1
+ # assert "l+".to_re.search_in("hello world", 3).from == 3
+ # assert "z".to_re.search_in("hello world", 0) == null
+ redef fun search_in(text, from)
+ do
+ assert not optimize_is_in
+
+ var comp_res = compile
+ assert comp_res == null else "Regex compilation failed with: {comp_res.message}\n".output
+
+ # Actually execute
+ text = text.to_s
+ var cstr = text.substring_from(from).to_cstring
+ var eflags = gather_eflags
+ var match = self.native_match
+ var matches = new Array[Match]
+
+ var res = native.regexec(cstr, 1, match, eflags)
+
+ # Found one?
+ if res == 0 then return new Match(text, from + match.rm_so, match.rm_eo - match.rm_so)
+
+ # No more match?
+ if res.is_nomatch then return null
+
+ # Error, should be out of memory but we cover any possible error anyway
+ var error_str = get_error(res)
+ "Regex search failed with: {error_str}\n".output
+ abort
+ end
+
+ # require: not optimize_is_in
+ #
+ # assert "ab".to_re.search_all_in("abbab").join(", ") == "ab, ab"
+ # assert "b+".to_re.search_all_in("abbabaabbbbbcab").join(", ") == "bb, b, bbbbb, b"
+ redef fun search_all_in(text)
+ do
+ assert not optimize_is_in
+
+ var comp_res = compile
+ assert comp_res == null else "Regex compilation failed with: {comp_res.message}\n".output
+
+ # Actually execute
+ text = text.to_s
+ var cstr = text.to_cstring
+ var eflags = gather_eflags
+ var eflags_or_notbol = eflags.bin_or(flag_notbol)
+ var match = self.native_match
+ var matches = new Array[Match]
+
+ var res = native.regexec(cstr, 1, match, eflags)
+ var d = 0
+ while res == 0 do
+ matches.add new Match(text, d + match.rm_so, match.rm_eo - match.rm_so)
+ if d == match.rm_eo then
+ d += 1
+ else d = d + match.rm_eo
+ cstr = cstr.substring_from(match.rm_eo)
+ res = native.regexec(cstr, 1, match, eflags_or_notbol)
+ end
+
+ # No more match?
+ if res.is_nomatch then return matches
+
+ # Error, should be out of memory but we cover any possible error anyway
+ var error_str = get_error(res)
+ "Regex search failed with: {error_str}\n".output
+ abort
+ end
+
+ redef fun to_s do return "/{string}/"
+end
import queue
import numeric
import error
+import re
return self.chars.iterator
end
- # Is 'c' contained in self ?
- #
- # DEPRECATED : Use self.chars.has instead
- fun has(c: Char): Bool
- do
- return self.chars.has(c)
- end
# Gets an Array containing the chars of self
#
end
end
+ # Escape string used in labels for graphviz
+ #
+ # assert ">><<".escape_to_dot == "\\>\\>\\<\\<"
+ fun escape_to_dot: String
+ do
+ return escape_more_to_c("|\{\}<>")
+ end
+
# Flat representation of self
fun flatten: FlatText is abstract
abstract class FlatText
super Text
+ # Underlying C-String (`char*`)
+ #
+ # Warning : Might be void in some subclasses, be sure to check
+ # if set before using it.
private var items: NativeString
# Real items, used as cache for to_cstring is called
return new_str.to_s
end
+
+ # Returns a capitalized `self`
+ #
+ # Letters that follow a letter are lowercased
+ # Letters that follow a non-letter are upcased.
+ #
+ # SEE : `Char::is_letter` for the definition of letter.
+ #
+ # assert "jAVASCRIPT".capitalized == "Javascript"
+ # assert "i am root".capitalized == "I Am Root"
+ # assert "ab_c -ab0c ab\nc".capitalized == "Ab_C -Ab0C Ab\nC"
+ fun capitalized: SELFTYPE do
+ if length == 0 then return self
+
+ var buf = new FlatBuffer.with_capacity(length)
+
+ var curr = chars[0].to_upper
+ var prev = curr
+ buf[0] = curr
+
+ for i in [1 .. length[ do
+ prev = curr
+ curr = self[i]
+ if prev.is_letter then
+ buf[i] = curr.to_lower
+ else
+ buf[i] = curr.to_upper
+ end
+ end
+
+ return buf.to_s
+ end
end
private class FlatSubstringsIter
redef fun to_cstring: NativeString
do
- if real_items != null then return real_items.as(not null)
- if index_from > 0 or index_to != items.cstring_length - 1 then
+ if real_items != null then
+ return real_items.as(not null)
+ else
var newItems = calloc_string(length + 1)
self.items.copy_to(newItems, length, index_from, 0)
newItems[length] = '\0'
self.real_items = newItems
return newItems
end
- return items
end
redef fun ==(other)
# Specific implementations MUST set this to `true` in order to invalidate caches
protected var is_dirty = true
+ # Copy-On-Write flag
+ #
+ # If the `Buffer` was to_s'd, the next in-place altering
+ # operation will cause the current `Buffer` to be re-allocated.
+ #
+ # The flag will then be set at `false`.
+ protected var written = false
+
# Modifies the char contained at pos `index`
#
# DEPRECATED : Use self.chars.[]= instead
# assert b == "hello world!"
fun lower is abstract
+ # Capitalizes each word in `self`
+ #
+ # Letters that follow a letter are lowercased
+ # Letters that follow a non-letter are upcased.
+ #
+ # SEE: `Char::is_letter` for the definition of a letter.
+ #
+ # var b = new FlatBuffer.from("jAVAsCriPt")"
+ # b.capitalize
+ # assert b == "Javascript"
+ # b = new FlatBuffer.from("i am root")
+ # b.capitalize
+ # assert b == "I Am Root"
+ # b = new FlatBuffer.from("ab_c -ab0c ab\nc")
+ # b.capitalize
+ # assert b == "Ab_C -Ab0C Ab\nC"
+ fun capitalize do
+ if length == 0 then return
+ var c = self[0].to_upper
+ self[0] = c
+ var prev: Char = c
+ for i in [1 .. length[ do
+ prev = c
+ c = self[i]
+ if prev.is_letter then
+ self[i] = c.to_lower
+ else
+ self[i] = c.to_upper
+ end
+ end
+ end
+
redef fun hash
do
if is_dirty then hash_cache = null
redef fun substrings do return new FlatSubstringsIter(self)
+ # Re-copies the `NativeString` into a new one and sets it as the new `Buffer`
+ #
+ # This happens when an operation modifies the current `Buffer` and
+ # the Copy-On-Write flag `written` is set at true.
+ private fun reset do
+ var nns = new NativeString(capacity)
+ items.copy_to(nns, length, 0, 0)
+ items = nns
+ written = false
+ end
+
redef fun [](index)
do
assert index >= 0
add(item)
return
end
+ if written then reset
assert index >= 0 and index < length
items[index] = item
end
redef fun clear do
is_dirty = true
+ if written then reset
length = 0
end
var c = capacity
if cap <= c then return
while c <= cap do c = c * 2 + 2
+ # The COW flag can be set at false here, since
+ # it does a copy of the current `Buffer`
+ written = false
var a = calloc_string(c+1)
if length > 0 then items.copy_to(a, length, 0, 0)
items = a
redef fun to_s: String
do
- return to_cstring.to_s_with_length(length)
+ written = true
+ if length == 0 then items = new NativeString(1)
+ return new FlatString.with_infos(items, length, 0, length - 1)
end
redef fun to_cstring
redef fun reverse
do
+ written = false
var ns = calloc_string(capacity)
var si = length - 1
var ni = 0
redef fun upper
do
+ if written then reset
var it = items
var id = length - 1
while id >= 0 do
redef fun lower
do
+ if written then reset
var it = items
var id = length - 1
while id >= 0 do
fun to_s_with_length(length: Int): FlatString
do
assert length >= 0
- return new FlatString.with_infos(self, length, 0, length - 1)
+ var str = new FlatString.with_infos(self, length, 0, length - 1)
+ str.real_items = self
+ return str
end
fun to_s_with_copy: FlatString
var length = cstring_length
var new_self = calloc_string(length + 1)
copy_to(new_self, length, 0, 0)
- return new FlatString.with_infos(new_self, length, 0, length - 1)
+ var str = new FlatString.with_infos(new_self, length, 0, length - 1)
+ str.real_items = self
+ return str
end
end
res.add(new Match(s.to_s, i, s.length - i))
return res
end
+
+ protected fun is_in(s: Text): Bool do return search_index_in(s, 0) != -1
end
# BM_Pattern are pre-compiled string motif for the Boyer-Moore algorithm.
do
return self.split_with(p).join(string)
end
+
+ # Does `self` contains at least one instance of `pattern`?
+ #
+ # assert "hello".has('l')
+ # assert "hello".has("ll")
+ # assert not "hello".has("lll")
+ fun has(pattern: Pattern): Bool do return pattern.is_in(self)
end
end
+redef class FlatBuffer
+
+ # Fix for this particular implementation
+ #
+ # Since the to_s of a FlatBuffer now builds using
+ # the old String contructor, this breaks everything.
+ #
+ # This will disappear when UTF8 is fully-supported
+ redef fun to_s do
+ written = false
+ return to_cstring.to_s_with_length(length)
+ end
+end
+
redef class NativeString
# Creates the index for said NativeString
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# String templating using macros.
+#
+# There is plenty of macro/templating tools in the worl,
+# yet another one.
+#
+# See `TemplateString` for more details.
+module macro
+
+import template
+
+# Template with macros replacement.
+#
+# `TemplateString` provides a simple way to customize generic string templates
+# using macros and replacement.
+#
+# A macro is represented as a string identifier like `%MACRO%` in the template
+# string. Using `TemplateString`, macros can be replaced by any `Streamable` data:
+#
+# var tpl = new TemplateString("Hello %NAME%!")
+# tpl.replace("NAME", "Dave")
+# assert tpl.write_to_string == "Hello Dave!"
+#
+# A macro identifier is valid if:
+#
+# * starts with an uppercase letter
+# * contains only numers, uppercase letters or '_'
+#
+# See `String::is_valid_macro_name` for more details.
+#
+# ## External template files
+#
+# When using large template files it's recommanded to use external template files.
+#
+# In external file `example.tpl`:
+#
+# <!DOCTYPE html>
+# <html lang="en">
+# <head>
+# <title>%TITLE%</title>
+# </head>
+# <body>
+# <h1>%TITLE%</h1>
+# <p>%ARTICLE%</p>
+# </body>
+# </html>
+#
+# Loading the template file using `TemplateString`:
+#
+# var file = "example.tpl"
+# if file.file_exists then
+# tpl = new TemplateString.from_file("example.tpl")
+# tpl.replace("TITLE", "Home Page")
+# tpl.replace("ARTICLE", "Welcome on my site!")
+# end
+#
+# ## Outputting
+#
+# Once macro replacement has been made, the `TemplateString` can be
+# output like any other `Template` using methods like `write_to`, `write_to_string`
+# or `write_to_file`.
+#
+# tpl = new TemplateString("Hello %NAME%!")
+# tpl.replace("NAME", "Dave")
+# assert tpl.write_to_string == "Hello Dave!"
+#
+# ## Template correctness
+#
+# `TemplateString` can be outputed even if all macros were not replaced.
+# In this case, the name of the macro will be displayed wuthout any replacement.
+#
+# tpl = new TemplateString("Hello %NAME%!")
+# assert tpl.write_to_string == "Hello %NAME%!"
+#
+# The `check` method can be used to ensure that all macros were replaced before
+# performing the output. Warning messages will be stored in `warnings` and can
+# be used to locate unreplaced macros.
+#
+# tpl = new TemplateString("Hello %NAME%!")
+# if not tpl.check then
+# assert not tpl.warnings.is_empty
+# print "Cannot output unfinished template:"
+# print tpl.warnings.join("\n")
+# exit(0)
+# else
+# tpl.write_to sys.stdout
+# end
+# assert tpl.write_to_string == "Hello %NAME%!"
+class TemplateString
+ super Template
+
+ # Template original text.
+ private var tpl_text: String
+
+ # Macros contained in the template file.
+ private var macros = new HashMap[String, Array[TemplateMacro]]
+
+ # Macro identifier delimiter char (`'%'` by default).
+ #
+ # To use a different delimiter you can subclasse `TemplateString` and defined the `marker`.
+ #
+ # class DollarTemplate
+ # super TemplateString
+ # redef var marker = '$'
+ # end
+ # var tpl = new DollarTemplate("Hello $NAME$!")
+ # tpl.replace("NAME", "Dave")
+ # assert tpl.write_to_string == "Hello Dave!"
+ protected var marker = '%'
+
+ # Creates a new template from a `text`.
+ #
+ # var tpl = new TemplateString("Hello %NAME%!")
+ # assert tpl.write_to_string == "Hello %NAME%!"
+ init(text: String) do
+ self.tpl_text = text
+ parse
+ end
+
+ # Creates a new template from the contents of `file`.
+ init from_file(file: String) do
+ init load_template_file(file)
+ end
+
+ # Loads the template file contents.
+ private fun load_template_file(tpl_file: String): String do
+ var file = new IFStream.open(tpl_file)
+ var text = file.read_all
+ file.close
+ return text
+ end
+
+ # Finds all the macros contained in `text` and store them in `macros`.
+ #
+ # Also build `self` template parts using original template text.
+ private fun parse do
+ var text = tpl_text
+ var chars = text.chars
+ var pos = 0
+ var out = new FlatBuffer
+ var start_pos: Int
+ var end_pos: Int
+ while pos < text.length do
+ # lookup opening tag
+ start_pos = text.read_until_char(pos, marker, out)
+ if start_pos < 0 then
+ text.read_until_pos(pos, text.length, out)
+ add out.to_s
+ break
+ end
+ add out.to_s
+ pos = start_pos + 1
+ # lookup closing tag
+ out.clear
+ end_pos = text.read_until_char(pos, marker, out)
+ if end_pos < 0 then
+ text.read_until_pos(pos, text.length, out)
+ add "%"
+ add out.to_s
+ break
+ end
+ pos = end_pos + 1
+ # check macro
+ var name = out.to_s
+ if name.is_valid_macro_name then
+ add make_macro(name, start_pos, end_pos)
+ else
+ add "%"
+ add name
+ add "%"
+ end
+ out.clear
+ end
+ end
+
+ # Add a new macro to the list
+ private fun make_macro(name: String, start_pos, end_pos: Int): TemplateMacro do
+ if not macros.has_key(name) then
+ macros[name] = new Array[TemplateMacro]
+ end
+ var macro = new TemplateMacro(name, start_pos, end_pos)
+ macros[name].add macro
+ return macro
+ end
+
+ # Available macros in `self`.
+ #
+ # var tpl = new TemplateString("Hello %NAME%!")
+ # assert tpl.macro_names.first == "NAME"
+ fun macro_names: Collection[String] do return macros.keys
+
+ # Does `self` contain a macro with `name`.
+ #
+ # var tpl = new TemplateString("Hello %NAME%")
+ # assert tpl.has_macro("NAME")
+ fun has_macro(name: String): Bool do return macro_names.has(name)
+
+ # Replace a `macro` by a streamable `replacement`.
+ #
+ # REQUIRE `has_macro(name)`
+ #
+ # var tpl = new TemplateString("Hello %NAME%!")
+ # tpl.replace("NAME", "Dave")
+ # assert tpl.write_to_string == "Hello Dave!"
+ fun replace(name: String, replacement: Streamable) do
+ assert has_macro(name)
+ for macro in macros[name] do
+ macro.replacement = replacement
+ end
+ end
+
+ # Check if all macros were replaced.
+ #
+ # Return false if a macro was not replaced and store message in `warnings`.
+ #
+ # var tpl = new TemplateString("Hello %FIRSTNAME%, %LASTNAME%!")
+ # assert not tpl.check
+ # tpl.replace("FIRSTNAME", "Corben")
+ # tpl.replace("LASTNAME", "Dallas")
+ # assert tpl.check
+ fun check: Bool do
+ warnings.clear
+ var all_ok = true
+ for name, macros in self.macros do
+ for macro in macros do
+ if not macro.is_replaced then
+ all_ok = false
+ warnings.add "No replacement for macro %{macro.name}% at {macro.location}"
+ end
+ end
+ end
+ return all_ok
+ end
+
+ # Last `check` warnings.
+ #
+ # var tpl = new TemplateString("Hello %FIRSTNAME%, %LASTNAME%!")
+ # tpl.check
+ # assert tpl.warnings.length == 2
+ # assert tpl.warnings[0] == "No replacement for macro %FIRSTNAME% at (6:16)"
+ # assert tpl.warnings[1] == "No replacement for macro %LASTNAME% at (19:28)"
+ # tpl.replace("FIRSTNAME", "Corben")
+ # tpl.replace("LASTNAME", "Dallas")
+ # tpl.check
+ # assert tpl.warnings.is_empty
+ var warnings = new Array[String]
+
+ # Returns a view on `self` macros on the form `macro.name`/`macro.replacement`.
+ #
+ # Given that all macros with the same name are all replaced with the same
+ # replacement, this view contains only one entry for each name.
+ #
+ # var tpl = new TemplateString("Hello %FIRSTNAME%, %LASTNAME%!")
+ # for name, rep in tpl do assert rep == null
+ # tpl.replace("FIRSTNAME", "Corben")
+ # tpl.replace("LASTNAME", "Dallas")
+ # for name, rep in tpl do assert rep != null
+ fun iterator: MapIterator[String, nullable Streamable] do
+ return new TemplateStringIterator(self)
+ end
+end
+
+# A macro is a special text command that is replaced by other content in a `TemplateString`.
+private class TemplateMacro
+ super Template
+ # Macro name as found in the template.
+ var name: String
+
+ # Macro starting position in template.
+ var start_pos: Int
+
+ # Macro ending position in template.
+ var end_pos: Int
+
+ # Macro replacement if any.
+ var replacement: nullable Streamable = null
+
+ # Does `self` already have a `replacement`?
+ fun is_replaced: Bool do return replacement != null
+
+ # Render `replacement` or else `name`.
+ redef fun rendering do
+ if is_replaced then
+ add replacement.as(not null)
+ else
+ add "%{name}%"
+ end
+ end
+
+ # Human readable location.
+ fun location: String do return "({start_pos}:{end_pos})"
+end
+
+redef class String
+ # Reads `self` from pos `from` to pos `to` and store result in `buffer`.
+ private fun read_until_pos(from, to: Int, buffer: Buffer): Int do
+ if from < 0 or from >= length or
+ to < 0 or to >= length or
+ from >= to then return -1
+ var pos = from
+ while pos < to do
+ buffer.add self[pos]
+ pos += 1
+ end
+ return pos
+ end
+
+ # Reads `self` until `to` is encountered and store result in `buffer`.
+ #
+ # Returns `to` position or `-1` if not found.
+ private fun read_until_char(from: Int, char: Char, buffer: Buffer): Int do
+ if from < 0 or from >= length then return -1
+ var pos = from
+ while pos > -1 and pos < length do
+ var c = self[pos]
+ if c == char then return pos
+ buffer.add c
+ pos += 1
+ end
+ return -1
+ end
+
+ # Is `self` a valid macro identifier?
+ #
+ # A macro identifier is valid if:
+ #
+ # * starts with an uppercase letter
+ # * contains only numers, uppercase letters or '_'
+ #
+ # # valid
+ # assert "NAME".is_valid_macro_name
+ # assert "FIRST_NAME".is_valid_macro_name
+ # assert "BLOCK1".is_valid_macro_name
+ # # invalid
+ # assert not "1BLOCK".is_valid_macro_name
+ # assert not "_BLOCK".is_valid_macro_name
+ # assert not "FIRST NAME".is_valid_macro_name
+ # assert not "name".is_valid_macro_name
+ fun is_valid_macro_name: Bool do
+ if not first.is_upper then return false
+ for c in self do
+ if not c.is_upper and c != '_' and not c.is_digit then return false
+ end
+ return true
+ end
+end
+
+private class TemplateStringIterator
+ super MapIterator[String, nullable Streamable]
+
+ private var subject: TemplateString
+ private var key_it: Iterator[String] is noinit
+
+ init do
+ self.key_it = subject.macro_names.iterator
+ end
+
+ redef fun is_ok do return key_it.is_ok
+ redef fun next do key_it.next
+ redef fun key do return key_it.item
+ redef fun item do return subject.macros[key].first.replacement
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module test_macro is test_suite
+
+import test_suite
+import macro
+
+class TestTemplateString
+ super TestSuite
+
+ fun test_tpl_parse_1 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>Dave's Profile</title>
+ </head>
+ <body>
+ <h1>Dave</h1>
+ <p>Profile</p>
+ </body>
+</html>"""
+ var subject = new TemplateString(tpl)
+ var res = subject.write_to_string
+ assert res == tpl
+ end
+
+ fun test_tpl_parse_2 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>%TITLE%</title>
+ </head>
+ <body>
+ <h1>%TITLE%</h1>
+ <p>%ARTICLE%</p>
+ </body>
+</html>"""
+ var subject = new TemplateString(tpl)
+ var res = subject.write_to_string
+ assert res == tpl
+ end
+
+ fun test_tpl_parse_3 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>%</title>
+ </head>
+</html>"""
+ var subject = new TemplateString(tpl)
+ var res = subject.write_to_string
+ assert res == tpl
+ end
+
+ fun test_tpl_parse_4 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>%</title>
+ </head>
+ <body>
+ <h1>%</h1>
+ </body>
+</html>"""
+ var subject = new TemplateString(tpl)
+ var res = subject.write_to_string
+ assert res == tpl
+ end
+
+ fun test_tpl_parse_5 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>%</title>
+ </head>
+ <body>
+ <h1>%TITLE%</h1>
+ <p>%ARTICLE%</p>
+ </body>
+</html>"""
+ var subject = new TemplateString(tpl)
+ var res = subject.write_to_string
+ assert res == tpl
+ end
+
+ fun test_tpl_parse_6 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>%</title>
+ </head>
+ <body>
+ <h1>%%</h1>
+ </body>
+</html>"""
+ var subject = new TemplateString(tpl)
+ var res = subject.write_to_string
+ assert res == tpl
+ end
+
+ fun test_tpl_replace_1 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>%TITLE%</title>
+ </head>
+ <body>
+ <h1>%TITLE%</h1>
+ <p>%ARTICLE%</p>
+ </body>
+</html>"""
+ var exp = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>Hello World!</title>
+ </head>
+ <body>
+ <h1>Hello World!</h1>
+ <p>%ARTICLE%</p>
+ </body>
+</html>"""
+ var subject = new TemplateString(tpl)
+ subject.replace("TITLE", "Hello World!")
+ var res = subject.write_to_string
+ assert res == exp
+ end
+
+ fun test_tpl_replace_2 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>%TITLE%</title>
+ </head>
+ <body>
+ <h1>%TITLE%</h1>
+ <p>%BODY%</p>
+ </body>
+</html>"""
+ var exp = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>Hello World!</title>
+ </head>
+ <body>
+ <h1>Hello World!</h1>
+ <p>Some body you want to know...</p>
+ </body>
+</html>"""
+ var subject = new TemplateString(tpl)
+ subject.replace("TITLE", "Hello World!")
+ subject.replace("BODY", "Some body you want to know...")
+ var res = subject.write_to_string
+ assert res == exp
+ end
+
+ fun test_tpl_replace_3 do
+ var tpl = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>%TITLE%</title>
+ </head>
+ <body>
+ <h1>%TITLE%</h1>
+ <p>%BODY%</p>
+ </body>
+</html>"""
+ var exp = """
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <title>Hello World!</title>
+ </head>
+ <body>
+ <h1>Hello World!</h1>
+ <p><a href="#">Click me!</a></p>
+ </body>
+</html>"""
+ var link = new Template
+ var subject = new TemplateString(tpl)
+ subject.replace("TITLE", "Hello World!")
+ subject.replace("BODY", link)
+ link.add "<a href=\"#\">"
+ link.add "Click me!"
+ link.add "</a>"
+ var res = subject.write_to_string
+ assert res == exp
+ end
+end
protected type N: TreeNode[K, E]
# The `root` node of the tree (null if tree is empty)
- protected var root: nullable N protected writable = null
+ protected var root: nullable N = null is protected writable
# Display the tree in a gaphical windows
# Graphviz with a working -Txlib is expected
var value: E
# Direct parent of this node (null if the node is root)
- var parent: nullable SELF writable = null
+ var parent: nullable SELF = null is writable
redef fun to_s do return "\{{value or else ""}\}"
# limitations under the License.
# Serices from the X11 library
-module x11 is pkgconfig("x11")
+module x11 is pkgconfig
# Open the current display from the environment variables
#
if exists('g:syntastic_nitg')
let s:nitg = g:syntastic_nitg
else
- let s:nitg = "nitc"
+ let s:nitg = "nitpick"
endif
if !executable(s:nitg)
if exists('g:syntastic_nitg')
- echo "Syntastic for Nit error: Custom nitg cannot be found at: " . g:syntastic_nitg
+ echo "Syntastic for Nit error: Custom tool cannot be found at: " . g:syntastic_nitg
endif
finish
endif
endfunction
function! SyntaxCheckers_nit_nitg_GetLocList()
- let makeprg = s:nitg . " --no-color --only-metamodel "
+ let makeprg = s:nitg . " --no-color --only-metamodel -W "
" custom NIT_DIR
if exists('g:syntastic_nit_dir')
margin: 10px 0;
}
+article {
+ padding: 10px 0px;
+}
+
+article.nospace {
+ padding: 0;
+ margin: 0;
+}
+
/*
* Sidebar
*/
display: none;
}
-#content article {
- padding: 10px 0px;
-}
-
#content article:target {
padding-left: 10px;
margin-left: -10px;
vertical-align: middle;
}
-.signature a, .list-definition a {
+.signature a, .list-definition a, .info.signature a {
color: #0d8921;
}
text-align: center;
}
-.synopsys {
+.nitdoc .synopsys {
margin: 5px 0;
font-size: 16px;
font-weight: bold;
NITCOPT=
OLDNITCOPT=
-OBJS=nitdoc nitmetrics nitg nit nitx nitunit nitlight nitls nitdbg_client nitserial
+OBJS=nitg nitpick nit nitdoc nitls nitunit nitpretty nitmetrics nitx nitlight nitdbg_client nitserial
SRCS=$(patsubst %,%.nit,$(OBJS))
BINS=$(patsubst %,../bin/%,$(OBJS))
import semantize
import platform
import c_tools
+private import annotation
# Add compiling options
redef class ToolContext
# The main module of the program currently compiled
# Is assigned during the separate compilation
- var mainmodule: MModule writable
+ var mainmodule: MModule is writable
# The real main module of the program
var realmainmodule: MModule
# The modeulbuilder used to know the model and the AST
- var modelbuilder: ModelBuilder protected writable
+ var modelbuilder: ModelBuilder is protected writable
# Is hardening asked? (see --hardening)
fun hardening: Bool do return self.modelbuilder.toolcontext.opt_hardening.value
fun new_visitor: VISITOR is abstract
# Where global declaration are stored (the main .h)
- var header: CodeWriter writable
+ var header: CodeWriter is writable
# Provide a declaration that can be requested (before or latter) by a visitor
fun provide_declaration(key: String, s: String)
var compiler: COMPILER
# The current visited AST node
- var current_node: nullable ANode writable = null
+ var current_node: nullable ANode = null is writable
# The current `Frame`
- var frame: nullable Frame writable
+ var frame: nullable Frame is writable
# Alias for self.compiler.mainmodule.object_type
fun object_type: MClassType do return self.compiler.mainmodule.object_type
# Generate a super call from a method definition
fun supercall(m: MMethodDef, recvtype: MClassType, args: Array[RuntimeVariable]): nullable RuntimeVariable is abstract
+ # Adapt the arguments of a method according to targetted `MMethodDef`
fun adapt_signature(m: MMethodDef, args: Array[RuntimeVariable]) is abstract
+ # Unbox all the arguments of a method when implemented `extern` or `intern`
+ fun unbox_signature_extern(m: MMethodDef, args: Array[RuntimeVariable]) is abstract
+
# Box or unbox a value to another type iff a C type conversion is needed
# ENSURE: `result.mtype.ctype == mtype.ctype`
fun autobox(value: RuntimeVariable, mtype: MType): RuntimeVariable is abstract
+ # Box extern classes to be used in the generated code
+ fun box_extern(value: RuntimeVariable, mtype: MType): RuntimeVariable is abstract
+
+ # Unbox extern classes to be used in extern code (legacy NI and FFI)
+ fun unbox_extern(value: RuntimeVariable, mtype: MType): RuntimeVariable is abstract
+
# Generate a polymorphic subtype test
fun type_test(value: RuntimeVariable, mtype: MType, tag: String): RuntimeVariable is abstract
return res
end
+ # The difference with `new_var` is the C static type of the local variable
+ fun new_var_extern(mtype: MType): RuntimeVariable
+ do
+ mtype = self.anchor(mtype)
+ var name = self.get_name("var")
+ var res = new RuntimeVariable(name, mtype, mtype)
+ self.add_decl("{mtype.ctype_extern} {name} /* : {mtype} for extern */;")
+ return res
+ end
+
# Return a new uninitialized named runtime_variable
fun new_named_var(mtype: MType, name: String): RuntimeVariable
do
# Non cached version of `c_name`
protected fun build_c_name: String is abstract
- protected var c_name_cache: nullable String writable = null
+ protected var c_name_cache: nullable String = null is writable
# Implements a call of the runtime_function
# May inline the body or generate a C function call
var mtype: MType
# The current casted type of the variable (as known in Nit)
- var mcasttype: MType writable
+ var mcasttype: MType is writable
# If the variable exaclty a mcasttype?
# false (usual value) means that the variable is a mcasttype or a subtype.
- var is_exact: Bool writable = false
+ var is_exact: Bool = false is writable
init(name: String, mtype: MType, mcasttype: MType)
do
var arguments: Array[RuntimeVariable]
# The runtime_variable associated to the return (in a function)
- var returnvar: nullable RuntimeVariable writable = null
+ var returnvar: nullable RuntimeVariable = null is writable
# The label at the end of the property
- var returnlabel: nullable String writable = null
+ var returnlabel: nullable String = null is writable
end
redef class MType
# Return the C type associated to a given Nit static type
fun ctype: String do return "val*"
+ # C type outside of the compiler code and in boxes
+ fun ctype_extern: String do return "val*"
+
+ # Short name of the `ctype` to use in unions
fun ctypename: String do return "val"
# Return the name of the C structure associated to a Nit live type
fun c_name: String is abstract
- protected var c_name_cache: nullable String protected writable
+ protected var c_name_cache: nullable String is protected writable
end
redef class MClassType
return "char*"
else if mclass.name == "NativeArray" then
return "val*"
- else if mclass.kind == extern_kind then
- return "void*"
else
return "val*"
end
end
+ redef fun ctype_extern: String
+ do
+ if mclass.kind == extern_kind then
+ return "void*"
+ else
+ return ctype
+ end
+ end
+
redef fun ctypename: String
do
if mclass.name == "Int" then
else if mclass.name == "NativeArray" then
#return "{self.arguments.first.ctype}*"
return "val"
- else if mclass.kind == extern_kind then
- return "ptr"
else
return "val"
end
v.supercall(mpropdef, arguments.first.mtype.as(MClassType), arguments)
end
+ # Try special compilation
+ if mpropdef.is_intern then
+ if compile_intern_to_c(v, mpropdef, arguments) then return
+ else if mpropdef.is_extern then
+ if mpropdef.mproperty.is_init then
+ if compile_externinit_to_c(v, mpropdef, arguments) then return
+ else
+ if compile_externmeth_to_c(v, mpropdef, arguments) then return
+ end
+ end
+
+ # Compile block if any
var n_block = n_block
if n_block != null then
for i in [0..mpropdef.msignature.arity[ do
v.assign(v.variable(variable), arguments[i+1])
end
v.stmt(n_block)
- else if mpropdef.is_intern then
- compile_intern_to_c(v, mpropdef, arguments)
- else if mpropdef.is_extern then
- if mpropdef.mproperty.is_init then
- compile_externinit_to_c(v, mpropdef, arguments)
- else
- compile_externmeth_to_c(v, mpropdef, arguments)
- end
- else
- abort
+ return
end
+
+ # We have a problem
+ var cn = v.class_name_string(arguments.first)
+ v.add("PRINT_ERROR(\"Runtime error: uncompiled method `%s` called on `%s`. NOT YET IMPLEMENTED\", \"{mpropdef.mproperty.name.escape_to_c}\", {cn});")
+ v.add_raw_abort
end
redef fun can_inline
return false
end
- fun compile_intern_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable])
+ fun compile_intern_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable]): Bool
do
var pname = mpropdef.mproperty.name
var cname = mpropdef.mclassdef.mclass.name
end
if pname != "==" and pname != "!=" then
v.adapt_signature(mpropdef, arguments)
+ v.unbox_signature_extern(mpropdef, arguments)
end
if cname == "Int" then
if pname == "output" then
v.add("printf(\"%ld\\n\", {arguments.first});")
- return
+ return true
else if pname == "object_id" then
v.ret(arguments.first)
- return
+ return true
else if pname == "+" then
v.ret(v.new_expr("{arguments[0]} + {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "-" then
v.ret(v.new_expr("{arguments[0]} - {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "unary -" then
v.ret(v.new_expr("-{arguments[0]}", ret.as(not null)))
- return
+ return true
else if pname == "*" then
v.ret(v.new_expr("{arguments[0]} * {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "/" then
v.ret(v.new_expr("{arguments[0]} / {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "%" then
v.ret(v.new_expr("{arguments[0]} % {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "lshift" then
v.ret(v.new_expr("{arguments[0]} << {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "rshift" then
v.ret(v.new_expr("{arguments[0]} >> {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "==" then
v.ret(v.equal_test(arguments[0], arguments[1]))
- return
+ return true
else if pname == "!=" then
var res = v.equal_test(arguments[0], arguments[1])
v.ret(v.new_expr("!{res}", ret.as(not null)))
- return
+ return true
else if pname == "<" then
v.ret(v.new_expr("{arguments[0]} < {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == ">" then
v.ret(v.new_expr("{arguments[0]} > {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "<=" then
v.ret(v.new_expr("{arguments[0]} <= {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == ">=" then
v.ret(v.new_expr("{arguments[0]} >= {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "to_f" then
v.ret(v.new_expr("(double){arguments[0]}", ret.as(not null)))
- return
+ return true
else if pname == "ascii" then
v.ret(v.new_expr("{arguments[0]}", ret.as(not null)))
- return
+ return true
end
else if cname == "Char" then
if pname == "output" then
v.add("printf(\"%c\", {arguments.first});")
- return
+ return true
else if pname == "object_id" then
v.ret(v.new_expr("(long){arguments.first}", ret.as(not null)))
- return
+ return true
else if pname == "successor" then
v.ret(v.new_expr("{arguments[0]} + {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "predecessor" then
v.ret(v.new_expr("{arguments[0]} - {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "==" then
v.ret(v.equal_test(arguments[0], arguments[1]))
- return
+ return true
else if pname == "!=" then
var res = v.equal_test(arguments[0], arguments[1])
v.ret(v.new_expr("!{res}", ret.as(not null)))
- return
+ return true
else if pname == "<" then
v.ret(v.new_expr("{arguments[0]} < {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == ">" then
v.ret(v.new_expr("{arguments[0]} > {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "<=" then
v.ret(v.new_expr("{arguments[0]} <= {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == ">=" then
v.ret(v.new_expr("{arguments[0]} >= {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "to_i" then
v.ret(v.new_expr("{arguments[0]}-'0'", ret.as(not null)))
- return
+ return true
else if pname == "ascii" then
v.ret(v.new_expr("(unsigned char){arguments[0]}", ret.as(not null)))
- return
+ return true
end
else if cname == "Bool" then
if pname == "output" then
v.add("printf({arguments.first}?\"true\\n\":\"false\\n\");")
- return
+ return true
else if pname == "object_id" then
v.ret(v.new_expr("(long){arguments.first}", ret.as(not null)))
- return
+ return true
else if pname == "==" then
v.ret(v.equal_test(arguments[0], arguments[1]))
- return
+ return true
else if pname == "!=" then
var res = v.equal_test(arguments[0], arguments[1])
v.ret(v.new_expr("!{res}", ret.as(not null)))
- return
+ return true
end
else if cname == "Float" then
if pname == "output" then
v.add("printf(\"%f\\n\", {arguments.first});")
- return
+ return true
else if pname == "object_id" then
v.ret(v.new_expr("(double){arguments.first}", ret.as(not null)))
- return
+ return true
else if pname == "+" then
v.ret(v.new_expr("{arguments[0]} + {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "-" then
v.ret(v.new_expr("{arguments[0]} - {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "unary -" then
v.ret(v.new_expr("-{arguments[0]}", ret.as(not null)))
- return
+ return true
else if pname == "succ" then
v.ret(v.new_expr("{arguments[0]}+1", ret.as(not null)))
- return
+ return true
else if pname == "prec" then
v.ret(v.new_expr("{arguments[0]}-1", ret.as(not null)))
- return
+ return true
else if pname == "*" then
v.ret(v.new_expr("{arguments[0]} * {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "/" then
v.ret(v.new_expr("{arguments[0]} / {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "==" then
v.ret(v.equal_test(arguments[0], arguments[1]))
- return
+ return true
else if pname == "!=" then
var res = v.equal_test(arguments[0], arguments[1])
v.ret(v.new_expr("!{res}", ret.as(not null)))
- return
+ return true
else if pname == "<" then
v.ret(v.new_expr("{arguments[0]} < {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == ">" then
v.ret(v.new_expr("{arguments[0]} > {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "<=" then
v.ret(v.new_expr("{arguments[0]} <= {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == ">=" then
v.ret(v.new_expr("{arguments[0]} >= {arguments[1]}", ret.as(not null)))
- return
+ return true
else if pname == "to_i" then
v.ret(v.new_expr("(long){arguments[0]}", ret.as(not null)))
- return
+ return true
end
else if cname == "NativeString" then
if pname == "[]" then
v.ret(v.new_expr("{arguments[0]}[{arguments[1]}]", ret.as(not null)))
- return
+ return true
else if pname == "[]=" then
v.add("{arguments[0]}[{arguments[1]}]={arguments[2]};")
- return
+ return true
else if pname == "copy_to" then
v.add("memmove({arguments[1]}+{arguments[4]},{arguments[0]}+{arguments[3]},{arguments[2]});")
- return
+ return true
else if pname == "atoi" then
v.ret(v.new_expr("atoi({arguments[0]});", ret.as(not null)))
- return
+ return true
else if pname == "init" then
v.ret(v.new_expr("(char*)nit_alloc({arguments[1]})", ret.as(not null)))
- return
+ return true
end
else if cname == "NativeArray" then
v.native_array_def(pname, ret, arguments)
- return
+ return true
end
if pname == "exit" then
v.add("exit({arguments[1]});")
- return
+ return true
else if pname == "sys" then
v.ret(v.new_expr("glob_sys", ret.as(not null)))
- return
+ return true
else if pname == "calloc_string" then
v.ret(v.new_expr("(char*)nit_alloc({arguments[1]})", ret.as(not null)))
- return
+ return true
else if pname == "calloc_array" then
v.calloc_array(ret.as(not null), arguments)
- return
+ return true
else if pname == "object_id" then
v.ret(v.new_expr("(long){arguments.first}", ret.as(not null)))
- return
+ return true
else if pname == "is_same_type" then
v.ret(v.is_same_type_test(arguments[0], arguments[1]))
- return
+ return true
else if pname == "is_same_instance" then
v.ret(v.equal_test(arguments[0], arguments[1]))
- return
+ return true
else if pname == "output_class_name" then
var nat = v.class_name_string(arguments.first)
v.add("printf(\"%s\\n\", {nat});")
- return
+ return true
else if pname == "native_class_name" then
var nat = v.class_name_string(arguments.first)
v.ret(v.new_expr("(char*){nat}", ret.as(not null)))
- return
+ return true
else if pname == "force_garbage_collection" then
v.add("nit_gcollect();")
- return
+ return true
else if pname == "native_argc" then
v.ret(v.new_expr("glob_argc", ret.as(not null)))
- return
+ return true
else if pname == "native_argv" then
v.ret(v.new_expr("glob_argv[{arguments[1]}]", ret.as(not null)))
- return
+ return true
end
- v.add("PRINT_ERROR(\"NOT YET IMPLEMENTED {class_name}:{mpropdef} at {location.to_s}\\n\");")
- debug("Not implemented {mpropdef}")
+ return false
end
- fun compile_externmeth_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable])
+ # Compile an extern method
+ # Return `true` if the compilation was successful, `false` if a fall-back is needed
+ fun compile_externmeth_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable]): Bool
do
var externname
- var nextern = self.n_extern
- if nextern == null then
- v.add("PRINT_ERROR(\"NOT YET IMPLEMENTED nitni for {mpropdef} at {location.to_s}\\n\");")
- v.add("show_backtrace(1);")
- return
+ var at = self.get_single_annotation("extern", v.compiler.modelbuilder)
+ if at != null then
+ externname = at.arg_as_string(v.compiler.modelbuilder)
+ if externname == null then return false
+ else
+ return false
end
- externname = nextern.text.substring(1, nextern.text.length-2)
if location.file != null then
var file = location.file.filename
v.add_extern(file)
var ret = mpropdef.msignature.return_mtype
if ret != null then
ret = v.resolve_for(ret, arguments.first)
- res = v.new_var(ret)
+ res = v.new_var_extern(ret)
end
v.adapt_signature(mpropdef, arguments)
+ v.unbox_signature_extern(mpropdef, arguments)
if res == null then
v.add("{externname}({arguments.join(", ")});")
else
v.add("{res} = {externname}({arguments.join(", ")});")
+ res = v.box_extern(res, ret.as(not null))
v.ret(res)
end
+ return true
end
- fun compile_externinit_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable])
+ # Compile an extern factory
+ # Return `true` if the compilation was successful, `false` if a fall-back is needed
+ fun compile_externinit_to_c(v: AbstractCompilerVisitor, mpropdef: MMethodDef, arguments: Array[RuntimeVariable]): Bool
do
var externname
- var nextern = self.n_extern
- if nextern == null then
- v.add("PRINT_ERROR(\"NOT YET IMPLEMENTED nitni for {mpropdef} at {location.to_s}\\n\");")
- v.add("show_backtrace(1);")
- return
+ var at = self.get_single_annotation("extern", v.compiler.modelbuilder)
+ if at != null then
+ externname = at.arg_as_string(v.compiler.modelbuilder)
+ if externname == null then return false
+ else
+ return false
end
- externname = nextern.text.substring(1, nextern.text.length-2)
if location.file != null then
var file = location.file.filename
v.add_extern(file)
end
v.adapt_signature(mpropdef, arguments)
+ v.unbox_signature_extern(mpropdef, arguments)
var ret = arguments.first.mtype
- var res = v.new_var(ret)
+ var res = v.new_var_extern(ret)
arguments.shift
v.add("{res} = {externname}({arguments.join(", ")});")
+ res = v.box_extern(res, ret)
v.ret(res)
+ return true
end
end
return v.native_array_instance(elttype, l)
else if ctype == "val*" then
recv = v.init_instance(mtype)
- else if ctype == "void*" then
+ else if ctype == "char*" then
recv = v.new_expr("NULL/*special!*/", mtype)
else
recv = v.new_expr("({ctype})0/*special!*/", mtype)
import platform
import abstract_compiler
-import common_ffi
-intrude import common_ffi::extra_java_files
+import ffi
+intrude import ffi::extra_java_files
import android_annotations
redef class ToolContext
module compiler_ffi
intrude import abstract_compiler
-intrude import common_ffi
+intrude import ffi
import nitni
redef class MModule
amodule.ensure_compile_ffi_wrapper
compile_ffi_method(mmodule)
- assert self isa AExternPropdef
-
# nitni - Compile missing callbacks
mmodule.ensure_compile_nitni_base(v)
var ccu = mmodule.nitni_ccu.as(not null)
redef fun compile_externmeth_to_c(v, mpropdef, arguments)
do
- var mmodule = mpropdef.mclassdef.mmodule
-
# if using the old native interface fallback on previous implementation
- var nextern = self.n_extern
- if nextern != null then
- super
- return
- end
+ if n_extern_code_block == null then return super
+ var mmodule = mpropdef.mclassdef.mmodule
mmodule.uses_ffi = true
var mclass_type = mpropdef.mclassdef.bound_mtype
end
v.adapt_signature(mpropdef, arguments)
+ v.unbox_signature_extern(mpropdef, arguments)
var arguments_for_c = new Array[String]
for a in [0..arguments.length[ do
v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
v.add("{recv_var} = ret_var->value;")
end
+ recv_var = v.box_extern(recv_var, return_mtype)
v.ret(recv_var)
end
compile_ffi_support_to_c(v)
+ return true
end
redef fun compile_externinit_to_c(v, mpropdef, arguments)
do
- var mmodule = mpropdef.mclassdef.mmodule
-
# if using the old native interface fallback on previous implementation
- var nextern = self.n_extern
- if nextern != null then
- super
- return
- end
+ if n_extern_code_block == null then return super
+ var mmodule = mpropdef.mclassdef.mmodule
mmodule.uses_ffi = true
var mclass_type = mpropdef.mclassdef.bound_mtype
var recv_var = v.new_var(return_mtype)
v.adapt_signature(mpropdef, arguments)
+ v.unbox_signature_extern(mpropdef, arguments)
arguments.shift
v.add("ret_var = {externname}({arguments_for_c.join(", ")});")
v.add("{recv_var} = ret_var->value;")
end
+ recv_var = v.box_extern(recv_var, return_mtype)
v.ret(recv_var)
compile_ffi_support_to_c(v)
+ return true
end
end
var mtype: MType = recv_mtype
var recv_var = null
if mproperty.is_init then
- if recv_mtype.mclass.kind == extern_kind then
- recv_var = nitni_visitor.new_var(mtype)
- else
- var recv_mtype = recv_mtype
- recv_var = nitni_visitor.init_instance(recv_mtype)
- nitni_visitor.add("{mtype.ctype} recv /* var self: {mtype} */;")
- nitni_visitor.add("recv = {recv_var};")
- end
+ var recv_mtype = recv_mtype
+ recv_var = nitni_visitor.init_instance(recv_mtype)
+ nitni_visitor.add("{mtype.ctype} recv /* var self: {mtype} */;")
+ nitni_visitor.add("recv = {recv_var};")
else
mtype = mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
recv_var = nitni_visitor.var_from_c("recv", mtype)
+ recv_var = nitni_visitor.box_extern(recv_var, mtype)
end
vars.add(recv_var)
for p in msignature.mparameters do
var arg_mtype = p.mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
var arg = nitni_visitor.var_from_c(p.name, arg_mtype)
+ arg = nitni_visitor.box_extern(arg, arg_mtype)
vars.add(arg)
end
assert ret_var != null
return_mtype = return_mtype.anchor_to(v.compiler.mainmodule, recv_mtype)
ret_var = nitni_visitor.autobox(ret_var, return_mtype)
+ ret_var = nitni_visitor.unbox_extern(ret_var, return_mtype)
nitni_visitor.ret_to_c(ret_var, return_mtype)
end
nitni_visitor.add("\}")
var vars = new Array[RuntimeVariable]
var recv_var = nitni_visitor.var_from_c("recv", mclass_type)
+ recv_var = nitni_visitor.box_extern(recv_var, mclass_type)
vars.add(recv_var)
for p in msignature.mparameters do
var arg_mtype = v.anchor(p.mtype)
var arg = nitni_visitor.var_from_c(p.name, arg_mtype)
+ arg = nitni_visitor.box_extern(arg, arg_mtype)
vars.add(arg)
end
if return_mtype != null then
assert ret_var != null
return_mtype = v.anchor(return_mtype)
+ ret_var = nitni_visitor.autobox(ret_var, return_mtype)
+ ret_var = nitni_visitor.unbox_extern(ret_var, return_mtype)
nitni_visitor.ret_to_c(ret_var, return_mtype)
end
nitni_visitor.add("\}")
var nitni_visitor = v.compiler.new_visitor
nitni_visitor.frame = v.frame
- var full_internal_csignature = "int {v.compiler.mainmodule.name }___{from.mangled_cname}_is_a_{to.mangled_cname}({from.cname_blind} from)"
+ var full_internal_csignature = "int {v.compiler.mainmodule.name }___{from.mangled_cname}_is_a_{to.mangled_cname}({internal_call_context.name_mtype(from)} from)"
+
nitni_visitor.add_decl("/* nitni check for {from} to {to} */")
nitni_visitor.add_decl("{full_internal_csignature} \{")
- var from_var = new RuntimeVariable("from->value", from, from)
+ #var from_var = new RuntimeVariable("from->value", from, from)
+ var from_var = nitni_visitor.var_from_c("from", from)
+ from_var = nitni_visitor.box_extern(from_var, from)
var recv_var = nitni_visitor.type_test(from_var, to, "FFI isa")
nitni_visitor.add("return {recv_var};")
nitni_visitor = v.compiler.new_visitor
nitni_visitor.frame = v.frame
- full_internal_csignature = "{to.cname_blind} {v.compiler.mainmodule.name }___{from.mangled_cname}_as_{to.mangled_cname}({from.cname_blind} from)"
+ full_internal_csignature = "{to.cname_blind} {v.compiler.mainmodule.name }___{from.mangled_cname}_as_{to.mangled_cname}({internal_call_context.name_mtype(from)} from)"
nitni_visitor.add_decl("/* nitni cast for {from} to {to} */")
nitni_visitor.add_decl("{full_internal_csignature} \{")
from_var = nitni_visitor.var_from_c("from", from)
+ from_var = nitni_visitor.box_extern(from_var, from)
## test type
var check = nitni_visitor.type_test(from_var, to, "FFI cast")
## internal cast
recv_var = nitni_visitor.autobox(from_var, to)
+ recv_var = nitni_visitor.unbox_extern(recv_var, to)
nitni_visitor.ret_to_c(recv_var, to)
var compiler = new GlobalCompiler(mainmodule, self, runtime_type_analysis)
compiler.compile_header
+ if mainmodule.model.get_mclasses_by_name("Pointer") != null then
+ runtime_type_analysis.live_types.add(mainmodule.pointer_type)
+ end
for t in runtime_type_analysis.live_types do
compiler.declare_runtimeclass(t)
end
for t in runtime_type_analysis.live_types do
if t.ctype == "val*" then
compiler.generate_init_instance(t)
+ if t.mclass.kind == extern_kind then
+ compiler.generate_box_instance(t)
+ end
else
compiler.generate_box_instance(t)
end
self.runtime_type_analysis = runtime_type_analysis
self.live_primitive_types = new Array[MClassType]
for t in runtime_type_analysis.live_types do
- if t.ctype != "val*" then
+ if t.ctype != "val*" or t.mclass.name == "Pointer" then
self.live_primitive_types.add(t)
end
end
v.add_decl("{mtype.arguments.first.ctype} values[1];")
end
- if mtype.ctype != "val*" then
+ if mtype.ctype_extern != "val*" then
# Is the Nit type is native then the struct is a box with two fields:
# * the `classid` to be polymorph
# * the `value` that contains the native value.
- v.add_decl("{mtype.ctype} value;")
+ v.add_decl("{mtype.ctype_extern} value;")
end
# Collect all attributes and associate them a field in the structure.
fun generate_box_instance(mtype: MClassType)
do
assert self.runtime_type_analysis.live_types.has(mtype)
- assert mtype.ctype != "val*"
var v = self.new_visitor
self.header.add_decl("val* BOX_{mtype.c_name}({mtype.ctype});")
end
end
+ redef fun unbox_extern(value, mtype)
+ do
+ if mtype isa MClassType and mtype.mclass.kind == extern_kind and
+ mtype.mclass.name != "NativeString" then
+ var res = self.new_var_extern(mtype)
+ self.add "{res} = ((struct {mtype.c_name}*){value})->value; /* unboxing {value.mtype} */"
+ return res
+ else
+ return value
+ end
+ end
+
+ redef fun box_extern(value, mtype)
+ do
+ if not mtype isa MClassType or mtype.mclass.kind != extern_kind or
+ mtype.mclass.name == "NativeString" then return value
+
+ var valtype = value.mtype.as(MClassType)
+ var res = self.new_var(mtype)
+ if compiler.runtime_type_analysis != null and not compiler.runtime_type_analysis.live_types.has(value.mtype.as(MClassType)) then
+ self.add("/*no boxing of {value.mtype}: {value.mtype} is not live! */")
+ self.add("PRINT_ERROR(\"Dead code executed!\\n\"); show_backtrace(1);")
+ return res
+ end
+ self.add("{res} = BOX_{valtype.c_name}({value}); /* boxing {value.mtype} */")
+ return res
+ end
+
# The runtime types that are acceptable for a given receiver.
fun collect_types(recv: RuntimeVariable): Array[MClassType]
do
do
var recv_type = get_recvtype(m, recvtype, args)
var recv = get_recv(recv_type, args)
+ if m.is_extern then recv = unbox_extern(recv, recv_type)
var new_args = args.to_a
self.varargize(m, m.msignature.as(not null), new_args)
new_args.first = recv
do
var recv_type = get_recvtype(m, recvtype, args)
var recv = get_recv(recv_type, args)
+ if m.is_extern then recv = unbox_extern(recv, recv_type)
var new_args = args.to_a
new_args.first = recv
return finalize_call(m, recv_type, new_args)
end
end
+ redef fun unbox_signature_extern(m, args)
+ do
+ var recv = args.first
+ for i in [0..m.msignature.arity[ do
+ var t = m.msignature.mparameters[i].mtype
+ if i == m.msignature.vararg_rank then
+ t = args[i+1].mtype
+ end
+ t = self.resolve_for(t, recv)
+ if m.is_extern then args[i+1] = self.unbox_extern(args[i+1], t)
+ end
+ end
+
# FIXME: this is currently buggy since recv is not exact
redef fun vararg_instance(mpropdef, recv, varargs, elttype)
do
if not t.is_subtype(self.compiler.mainmodule, null, value2.mcasttype) then continue
s.add "({value1}->classid == {self.compiler.classid(t)} && ((struct {t.c_name}*){value1})->value == ((struct {t.c_name}*){value2})->value)"
end
+
+ if self.compiler.mainmodule.model.get_mclasses_by_name("Pointer") != null then
+ var pointer_type = self.compiler.mainmodule.pointer_type
+ if value1.mcasttype.is_subtype(self.compiler.mainmodule, null, pointer_type) or
+ value2.mcasttype.is_subtype(self.compiler.mainmodule, null, pointer_type) then
+ s.add "(((struct {pointer_type.c_name}*){value1})->value == ((struct {pointer_type.c_name}*){value2})->value)"
+ end
+ end
+
if s.is_empty then
self.add("{res} = {value1} == {value2};")
else
self.header.add_decl("void* val;")
for c, v in self.box_kinds do
var t = c.mclass_type
- self.header.add_decl("{t.ctype} {t.ctypename};")
+
+ # `Pointer` reuse the `val` field
+ if t.mclass.name == "Pointer" then continue
+
+ self.header.add_decl("{t.ctype_extern} {t.ctypename};")
end
self.header.add_decl("\} nitattribute_t; /* general C type representing a Nit attribute. */")
end
fun box_kind_of(mclass: MClass): Int
do
- if mclass.mclass_type.ctype == "val*" then
+ #var pointer_type = self.mainmodule.pointer_type
+ #if mclass.mclass_type.ctype == "val*" or mclass.mclass_type.is_subtype(self.mainmodule, mclass.mclass_type pointer_type) then
+ if mclass.mclass_type.ctype_extern == "val*" then
return 0
- else if mclass.kind == extern_kind then
+ else if mclass.kind == extern_kind and mclass.name != "NativeString" then
return self.box_kinds[self.mainmodule.get_primitive_class("Pointer")]
else
return self.box_kinds[mclass]
do
var mtype = mclass.intro.bound_mtype
var c_name = mclass.c_name
- var c_instance_name = mclass.c_instance_name
var vft = self.method_tables[mclass]
var attrs = self.attr_tables[mclass]
var v = new_visitor
var rta = runtime_type_analysis
- var is_dead = rta != null and not rta.live_classes.has(mclass) and mtype.ctype == "val*" and mclass.name != "NativeArray"
+ var is_dead = rta != null and not rta.live_classes.has(mclass) and mtype.ctype == "val*" and mclass.name != "NativeArray" and mclass.name != "Pointer"
v.add_decl("/* runtime class {c_name} */")
v.add_decl("\};")
end
- if mtype.ctype != "val*" then
- if mtype.mclass.name == "Pointer" or mtype.mclass.kind != extern_kind then
- #Build instance struct
- self.header.add_decl("struct instance_{c_instance_name} \{")
- self.header.add_decl("const struct type *type;")
- self.header.add_decl("const struct class *class;")
- self.header.add_decl("{mtype.ctype} value;")
- self.header.add_decl("\};")
- end
+ if mtype.ctype != "val*" or mtype.mclass.name == "Pointer" then
+ # Is a primitive type or the Pointer class, not any other extern class
- if not rta.live_types.has(mtype) then return
+ #Build instance struct
+ self.header.add_decl("struct instance_{c_name} \{")
+ self.header.add_decl("const struct type *type;")
+ self.header.add_decl("const struct class *class;")
+ self.header.add_decl("{mtype.ctype_extern} value;")
+ self.header.add_decl("\};")
+
+ if not rta.live_types.has(mtype) and mtype.mclass.name != "Pointer" then return
#Build BOX
- self.provide_declaration("BOX_{c_name}", "val* BOX_{c_name}({mtype.ctype});")
+ self.provide_declaration("BOX_{c_name}", "val* BOX_{c_name}({mtype.ctype_extern});")
v.add_decl("/* allocate {mtype} */")
- v.add_decl("val* BOX_{mtype.c_name}({mtype.ctype} value) \{")
- v.add("struct instance_{c_instance_name}*res = nit_alloc(sizeof(struct instance_{c_instance_name}));")
+ v.add_decl("val* BOX_{mtype.c_name}({mtype.ctype_extern} value) \{")
+ v.add("struct instance_{c_name}*res = nit_alloc(sizeof(struct instance_{c_name}));")
+ v.compiler.undead_types.add(mtype)
v.require_declaration("type_{c_name}")
v.add("res->type = &type_{c_name};")
v.require_declaration("class_{c_name}")
v.add("res->value = value;")
v.add("return (val*)res;")
v.add("\}")
+
+ if mtype.mclass.name != "Pointer" then return
+
+ v = new_visitor
+ self.provide_declaration("NEW_{c_name}", "{mtype.ctype} NEW_{c_name}(const struct type* type);")
+ v.add_decl("/* allocate {mtype} */")
+ v.add_decl("{mtype.ctype} NEW_{c_name}(const struct type* type) \{")
+ if is_dead then
+ v.add_abort("{mclass} is DEAD")
+ else
+ var res = v.new_named_var(mtype, "self")
+ res.is_exact = true
+ v.add("{res} = nit_alloc(sizeof(struct instance_{mtype.c_name}));")
+ v.add("{res}->type = type;")
+ hardening_live_type(v, "type")
+ v.require_declaration("class_{c_name}")
+ v.add("{res}->class = &class_{c_name};")
+ v.add("((struct instance_{mtype.c_name}*){res})->value = NULL;")
+ v.add("return {res};")
+ end
+ v.add("\}")
return
else if mclass.name == "NativeArray" then
#Build instance struct
- self.header.add_decl("struct instance_{c_instance_name} \{")
+ self.header.add_decl("struct instance_{c_name} \{")
self.header.add_decl("const struct type *type;")
self.header.add_decl("const struct class *class;")
# NativeArrays are just a instance header followed by a length and an array of values
v.add_decl("/* allocate {mtype} */")
v.add_decl("{mtype.ctype} NEW_{c_name}(int length, const struct type* type) \{")
var res = v.get_name("self")
- v.add_decl("struct instance_{c_instance_name} *{res};")
+ v.add_decl("struct instance_{c_name} *{res};")
var mtype_elt = mtype.arguments.first
- v.add("{res} = nit_alloc(sizeof(struct instance_{c_instance_name}) + length*sizeof({mtype_elt.ctype}));")
+ v.add("{res} = nit_alloc(sizeof(struct instance_{c_name}) + length*sizeof({mtype_elt.ctype}));")
v.add("{res}->type = type;")
hardening_live_type(v, "type")
v.require_declaration("class_{c_name}")
v.add("return (val*){res};")
v.add("\}")
return
+ else if mtype.mclass.kind == extern_kind and mtype.mclass.name != "NativeString" then
+ # Is an extern class (other than Pointer and NativeString)
+ # Pointer is caught in a previous `if`, and NativeString is internal
+
+ var pointer_type = mainmodule.pointer_type
+
+ self.provide_declaration("NEW_{c_name}", "{mtype.ctype} NEW_{c_name}(const struct type* type);")
+ v.add_decl("/* allocate {mtype} */")
+ v.add_decl("{mtype.ctype} NEW_{c_name}(const struct type* type) \{")
+ if is_dead then
+ v.add_abort("{mclass} is DEAD")
+ else
+ var res = v.new_named_var(mtype, "self")
+ res.is_exact = true
+ v.add("{res} = nit_alloc(sizeof(struct instance_{pointer_type.c_name}));")
+ v.add("{res}->type = type;")
+ hardening_live_type(v, "type")
+ v.require_declaration("class_{c_name}")
+ v.add("{res}->class = &class_{c_name};")
+ v.add("((struct instance_{pointer_type.c_name}*){res})->value = NULL;")
+ v.add("return {res};")
+ end
+ v.add("\}")
+ return
end
#Build NEW
end
end
+ redef fun unbox_signature_extern(m, args)
+ do
+ var msignature = m.msignature.resolve_for(m.mclassdef.bound_mtype, m.mclassdef.bound_mtype, m.mclassdef.mmodule, true)
+ var recv = args.first
+ if not m.mproperty.is_init and m.is_extern then
+ args.first = self.unbox_extern(args.first, m.mclassdef.mclass.mclass_type)
+ end
+ for i in [0..msignature.arity[ do
+ var t = msignature.mparameters[i].mtype
+ if i == msignature.vararg_rank then
+ t = args[i+1].mtype
+ end
+ if m.is_extern then args[i+1] = self.unbox_extern(args[i+1], t)
+ end
+ end
+
redef fun autobox(value, mtype)
do
if value.mtype == mtype then
else if value.mtype.ctype == "val*" and mtype.ctype == "val*" then
return value
else if value.mtype.ctype == "val*" then
- return self.new_expr("((struct instance_{mtype.c_instance_name}*){value})->value; /* autounbox from {value.mtype} to {mtype} */", mtype)
+ return self.new_expr("((struct instance_{mtype.c_name}*){value})->value; /* autounbox from {value.mtype} to {mtype} */", mtype)
else if mtype.ctype == "val*" then
var valtype = value.mtype.as(MClassType)
+ if mtype isa MClassType and mtype.mclass.kind == extern_kind and mtype.mclass.name != "NativeString" then
+ valtype = compiler.mainmodule.pointer_type
+ end
var res = self.new_var(mtype)
if compiler.runtime_type_analysis != null and not compiler.runtime_type_analysis.live_types.has(valtype) then
self.add("/*no autobox from {value.mtype} to {mtype}: {value.mtype} is not live! */")
end
end
+ redef fun unbox_extern(value, mtype)
+ do
+ if mtype isa MClassType and mtype.mclass.kind == extern_kind and
+ mtype.mclass.name != "NativeString" then
+ var pointer_type = compiler.mainmodule.pointer_type
+ var res = self.new_var_extern(mtype)
+ self.add "{res} = ((struct instance_{pointer_type.c_name}*){value})->value; /* unboxing {value.mtype} */"
+ return res
+ else
+ return value
+ end
+ end
+
+ redef fun box_extern(value, mtype)
+ do
+ if mtype isa MClassType and mtype.mclass.kind == extern_kind and
+ mtype.mclass.name != "NativeString" then
+ var valtype = compiler.mainmodule.pointer_type
+ var res = self.new_var(mtype)
+ if compiler.runtime_type_analysis != null and not compiler.runtime_type_analysis.live_types.has(value.mtype.as(MClassType)) then
+ self.add("/*no boxing of {value.mtype}: {value.mtype} is not live! */")
+ self.add("PRINT_ERROR(\"Dead code executed!\\n\"); show_backtrace(1);")
+ return res
+ end
+ self.require_declaration("BOX_{valtype.c_name}")
+ self.add("{res} = BOX_{valtype.c_name}({value}); /* boxing {value.mtype} */")
+ self.require_declaration("type_{mtype.c_name}")
+ self.add("{res}->type = &type_{mtype.c_name};")
+ self.require_declaration("class_{mtype.c_name}")
+ self.add("{res}->class = &class_{mtype.c_name};")
+ return res
+ else
+ return value
+ end
+ end
+
# Return a C expression returning the runtime type structure of the value
# The point of the method is to works also with primitives types.
fun type_info(value: RuntimeVariable): String
return table_send(mmethod, arguments, mmethod.const_color)
end
- # Handel common special cases before doing the effective method invocation
+ # Handle common special cases before doing the effective method invocation
# This methods handle the `==` and `!=` methods and the case of the null receiver.
# Note: a { is open in the generated C, that enclose and protect the effective method invocation.
# Client must not forget to close the } after them.
#
# The value returned is the result of the common special cases.
- # If not null, client must compine it with the result of their own effective method invocation.
+ # If not null, client must compile it with the result of their own effective method invocation.
#
# If `before_send` can shortcut the whole message sending, a dummy `if(0){`
# is generated to cancel the effective method invocation that will follow
# The attribute is primitive, thus we store it in a box
# The trick is to create the box the first time then resuse the box
self.add("if ({attr} != NULL) \{")
- self.add("((struct instance_{mtype.c_instance_name}*){attr})->value = {value}; /* {a} on {recv.inspect} */")
+ self.add("((struct instance_{mtype.c_name}*){attr})->value = {value}; /* {a} on {recv.inspect} */")
self.add("\} else \{")
value = self.autobox(value, self.object_type.as_nullable)
self.add("{attr} = {value}; /* {a} on {recv.inspect} */")
self.add_decl("const char* {res};")
if value.mtype.ctype == "val*" then
self.add "{res} = {value} == NULL ? \"null\" : {value}->type->name;"
- else if value.mtype isa MClassType and value.mtype.as(MClassType).mclass.kind == extern_kind then
+ else if value.mtype isa MClassType and value.mtype.as(MClassType).mclass.kind == extern_kind and
+ value.mtype.as(MClassType).name != "NativeString" then
self.add "{res} = \"{value.mtype.as(MClassType).mclass}\";"
else
self.require_declaration("type_{value.mtype.c_name}")
end
end
if primitive != null then
- test.add("((struct instance_{primitive.c_instance_name}*){value1})->value == ((struct instance_{primitive.c_instance_name}*){value2})->value")
+ test.add("((struct instance_{primitive.c_name}*){value1})->value == ((struct instance_{primitive.c_name}*){value2})->value")
else if can_be_primitive(value1) and can_be_primitive(value2) then
test.add("{value1}->class == {value2}->class")
var s = new Array[String]
for t, v in self.compiler.box_kinds do
- s.add "({value1}->class->box_kind == {v} && ((struct instance_{t.c_instance_name}*){value1})->value == ((struct instance_{t.c_instance_name}*){value2})->value)"
+ s.add "({value1}->class->box_kind == {v} && ((struct instance_{t.c_name}*){value1})->value == ((struct instance_{t.c_name}*){value2})->value)"
end
test.add("({s.join(" || ")})")
else
do
var elttype = arguments.first.mtype
var nclass = self.get_class("NativeArray")
- var recv = "((struct instance_{nclass.c_instance_name}*){arguments[0]})->values"
+ var recv = "((struct instance_{nclass.c_name}*){arguments[0]})->values"
if pname == "[]" then
self.ret(self.new_expr("{recv}[{arguments[1]}]", ret_type.as(not null)))
return
self.add("{recv}[{arguments[1]}]={arguments[2]};")
return
else if pname == "length" then
- self.ret(self.new_expr("((struct instance_{nclass.c_instance_name}*){arguments[0]})->length", ret_type.as(not null)))
+ self.ret(self.new_expr("((struct instance_{nclass.c_name}*){arguments[0]})->length", ret_type.as(not null)))
return
else if pname == "copy_to" then
- var recv1 = "((struct instance_{nclass.c_instance_name}*){arguments[1]})->values"
+ var recv1 = "((struct instance_{nclass.c_name}*){arguments[1]})->values"
self.add("memmove({recv1}, {recv}, {arguments[2]}*sizeof({elttype.ctype}));")
return
end
redef class MType
fun const_color: String do return "COLOR_{c_name}"
-
- # C name of the instance type to use
- fun c_instance_name: String do return c_name
-end
-
-redef class MClassType
- redef fun c_instance_name do return mclass.c_instance_name
-end
-
-redef class MClass
- # Extern classes use the C instance of kernel::Pointer
- fun c_instance_name: String
- do
- if kind == extern_kind then
- return "kernel__Pointer"
- else return c_name
- end
end
interface PropertyLayoutElement end
super PropertyLayoutElement
fun const_color: String do return "COLOR_{c_name}"
end
+
+redef class AMethPropdef
+ # The semi-global compilation does not support inlining calls to extern news
+ redef fun can_inline
+ do
+ var m = mpropdef
+ if m != null and m.mproperty.is_init and m.is_extern then return false
+ return super
+ end
+end
do
var mtype = mclass.intro.bound_mtype
var c_name = mclass.c_name
- var c_instance_name = mclass.c_instance_name
var vft = self.method_tables[mclass]
var attrs = self.attr_tables[mclass]
v.add_decl("\}")
v.add_decl("\};")
- if mtype.ctype != "val*" then
- if mtype.mclass.name == "Pointer" or mtype.mclass.kind != extern_kind then
- #Build instance struct
- self.header.add_decl("struct instance_{c_instance_name} \{")
- self.header.add_decl("const struct class *class;")
- self.header.add_decl("{mtype.ctype} value;")
- self.header.add_decl("\};")
- end
+ if mtype.ctype != "val*" or mtype.mclass.name == "Pointer" then
+ #Build instance struct
+ self.header.add_decl("struct instance_{c_name} \{")
+ self.header.add_decl("const struct class *class;")
+ self.header.add_decl("{mtype.ctype} value;")
+ self.header.add_decl("\};")
#Build BOX
self.provide_declaration("BOX_{c_name}", "val* BOX_{c_name}({mtype.ctype});")
v.add_decl("/* allocate {mtype} */")
v.add_decl("val* BOX_{mtype.c_name}({mtype.ctype} value) \{")
- v.add("struct instance_{c_instance_name}*res = nit_alloc(sizeof(struct instance_{c_instance_name}));")
+ v.add("struct instance_{c_name}*res = nit_alloc(sizeof(struct instance_{c_name}));")
v.require_declaration("class_{c_name}")
v.add("res->class = &class_{c_name};")
v.add("res->value = value;")
v.add("return (val*)res;")
v.add("\}")
+
+ if mtype.mclass.name != "Pointer" then return
+
+ v = new_visitor
+ self.provide_declaration("NEW_{c_name}", "{mtype.ctype} NEW_{c_name}();")
+ v.add_decl("/* allocate {mtype} */")
+ v.add_decl("{mtype.ctype} NEW_{c_name}() \{")
+ if is_dead then
+ v.add_abort("{mclass} is DEAD")
+ else
+ var res = v.new_named_var(mtype, "self")
+ res.is_exact = true
+ v.add("{res} = nit_alloc(sizeof(struct instance_{mtype.c_name}));")
+ v.require_declaration("class_{c_name}")
+ v.add("{res}->class = &class_{c_name};")
+ v.add("((struct instance_{mtype.c_name}*){res})->value = NULL;")
+ v.add("return {res};")
+ end
+ v.add("\}")
return
else if mclass.name == "NativeArray" then
#Build instance struct
v.add("return (val*){res};")
v.add("\}")
return
+ else if mtype.mclass.kind == extern_kind and mtype.mclass.name != "NativeString" then
+ var pointer_type = mainmodule.pointer_type
+
+ self.provide_declaration("NEW_{c_name}", "{mtype.ctype} NEW_{c_name}();")
+ v.add_decl("/* allocate {mtype} */")
+ v.add_decl("{mtype.ctype} NEW_{c_name}() \{")
+ if is_dead then
+ v.add_abort("{mclass} is DEAD")
+ else
+ var res = v.new_named_var(mtype, "self")
+ res.is_exact = true
+ v.add("{res} = nit_alloc(sizeof(struct instance_{pointer_type.c_name}));")
+ #v.add("{res}->type = type;")
+ v.require_declaration("class_{c_name}")
+ v.add("{res}->class = &class_{c_name};")
+ v.add("((struct instance_{pointer_type.c_name}*){res})->value = NULL;")
+ v.add("return {res};")
+ end
+ v.add("\}")
+ return
end
#Build NEW
return res
end
+ redef fun unbox_extern(value, mtype)
+ do
+ if mtype isa MClassType and mtype.mclass.kind == extern_kind and
+ mtype.mclass.name != "NativeString" then
+ var pointer_type = compiler.mainmodule.pointer_type
+ var res = self.new_var_extern(mtype)
+ self.add "{res} = ((struct instance_{pointer_type.c_name}*){value})->value; /* unboxing {value.mtype} */"
+ return res
+ else
+ return value
+ end
+ end
+
+ redef fun box_extern(value, mtype)
+ do
+ if mtype isa MClassType and mtype.mclass.kind == extern_kind and
+ mtype.mclass.name != "NativeString" then
+ var valtype = compiler.mainmodule.pointer_type
+ var res = self.new_var(mtype)
+ if compiler.runtime_type_analysis != null and not compiler.runtime_type_analysis.live_types.has(value.mtype.as(MClassType)) then
+ self.add("/*no boxing of {value.mtype}: {value.mtype} is not live! */")
+ self.add("PRINT_ERROR(\"Dead code executed!\\n\"); show_backtrace(1);")
+ return res
+ end
+ self.require_declaration("BOX_{valtype.c_name}")
+ self.add("{res} = BOX_{valtype.c_name}({value}); /* boxing {value.mtype} */")
+ self.require_declaration("class_{mtype.c_name}")
+ self.add("{res}->class = &class_{mtype.c_name};")
+ return res
+ else
+ return value
+ end
+ end
+
redef fun class_name_string(value)
do
var res = self.get_name("var_class_name")
lnk.add tpl_link
if mdoc != null then
lnk.add ": "
- lnk.add mdoc.short_comment
+ lnk.add mdoc.short_markdown
end
return new TplListItem.with_content(lnk)
end
lnk.add tpl_anchor
if mdoc != null then
lnk.add ": "
- lnk.add mdoc.short_comment
+ lnk.add mdoc.short_markdown
end
return new TplListItem.with_content(lnk)
end
lnk.add tpl_link
if mdoc != null then
lnk.add ": "
- lnk.add mdoc.short_comment
+ lnk.add mdoc.short_markdown
else if mclass.intro.mdoc != null then
lnk.add ": "
- lnk.add mclass.intro.mdoc.short_comment
+ lnk.add mclass.intro.mdoc.short_markdown
end
return new TplListItem.with_content(lnk)
end
var tpl = new Template
tpl.add mclassdef.tpl_namespace
tpl.add "::"
- tpl.add mproperty.name
+ tpl.add tpl_link
return tpl
end
return tpl
end
- redef fun tpl_title do
- var title = new Template
- title.add tpl_icon
- title.add tpl_link
- title.add tpl_signature
- return title
- end
-
redef fun tpl_definition do
var tpl = new TplDefinition
tpl.namespace = mclassdef.tpl_namespace
redef fun tpl_list_item do
var lnk = new Template
lnk.add new TplLabel.with_classes(tpl_css_classes.to_a)
- lnk.add tpl_link
+ var anchor = tpl_link
+ anchor.href = "{mclassdef.mclass.nitdoc_url}#{mproperty.nitdoc_id}"
+ lnk.add anchor
if mdoc != null then
lnk.add ": "
- lnk.add mdoc.short_comment
+ lnk.add mdoc.short_markdown
else if mproperty.intro.mdoc != null then
lnk.add ": "
- lnk.add mproperty.intro.mdoc.short_comment
+ lnk.add mproperty.intro.mdoc.short_markdown
end
return new TplListItem.with_content(lnk)
end
+
+ fun tpl_inheritance_item: TplListItem do
+ var lnk = new Template
+ lnk.add new TplLabel.with_classes(tpl_css_classes.to_a)
+ lnk.add mclassdef.mmodule.tpl_namespace
+ lnk.add "::"
+ var anchor = mclassdef.tpl_link
+ anchor.href = "{mclassdef.mclass.nitdoc_url}#{mproperty.nitdoc_id}"
+ lnk.add anchor
+ if mdoc != null then
+ lnk.add ": "
+ lnk.add mdoc.short_markdown
+ end
+ var li = new TplListItem.with_content(lnk)
+ li.css_classes.add "signature"
+ return li
+ end
end
redef class MMethod
tpl.add "\"{mproperty}\":["
for mpropdef in mprops do
var full_name = mpropdef.mclassdef.mclass.full_name
- tpl.add "\{txt:\"{full_name}\",url:\"{mpropdef.nitdoc_url}\"\},"
+ var cls_url = mpropdef.mclassdef.mclass.nitdoc_url
+ var def_url = "{cls_url}#{mpropdef.mproperty.nitdoc_id}"
+ tpl.add "\{txt:\"{full_name}\",url:\"{def_url}\"\},"
end
tpl.add "],"
end
do
if location == null then return null
var source = ctx.opt_source.value
- if source == null then return location.file.filename.simplify_path
+ if source == null then
+ var url = location.file.filename.simplify_path
+ return "<a target='_blank' title='Show source' href=\"{url}\">View Source</a>"
+ end
# THIS IS JUST UGLY ! (but there is no replace yet)
var x = source.split_with("%f")
source = x.join(location.file.filename.simplify_path)
end
# MProp description template
- fun tpl_mprop_article(mproperty: MProperty, mpropdefs: Array[MPropDef]): TplArticle do
- var article = mproperty.tpl_article
- if not mpropdefs.has(mproperty.intro) then
- # add intro synopsys
- var intro_article = mproperty.intro.tpl_short_article
- intro_article.source_link = tpl_showsource(mproperty.intro.location)
- article.add_child intro_article
+ #
+ # `main_mpropdef`: The most important mpropdef to display
+ # `local_mpropdefs`: List of other locally defined mpropdefs to display
+ # `lin`: full linearization from local_mpropdefs to intro (displayed in redef tree)
+ fun tpl_mprop_article(main_mpropdef: MPropDef, local_mpropdefs: Array[MPropDef],
+ lin: Array[MPropDef]): TplArticle do
+ var mprop = main_mpropdef.mproperty
+ var article = new TplArticle(mprop.nitdoc_id)
+ var title = new Template
+ title.add mprop.tpl_icon
+ title.add "<span id='{main_mpropdef.nitdoc_id}'></span>"
+ if main_mpropdef.is_intro then
+ title.add mprop.tpl_link
+ title.add mprop.intro.tpl_signature
+ else
+ var cls_url = mprop.intro.mclassdef.mclass.nitdoc_url
+ var def_url = "{cls_url}#{mprop.nitdoc_id}"
+ var lnk = new TplLink.with_title(def_url, mprop.name, "Go to introduction")
+ title.add "redef "
+ title.add lnk
+ end
+ article.title = title
+ article.title_classes.add "signature"
+ article.summary_title = "{mprop.nitdoc_name}"
+ article.subtitle = main_mpropdef.tpl_namespace
+ if main_mpropdef.mdoc != null then
+ article.content = main_mpropdef.mdoc.tpl_comment
+ end
+ var subarticle = new TplArticle("{main_mpropdef.nitdoc_id}_redefs")
+ # Add redef in same `MClass`
+ if local_mpropdefs.length > 1 then
+ for mpropdef in local_mpropdefs do
+ if mpropdef == main_mpropdef then continue
+ var redef_article = new TplArticle("{mpropdef.nitdoc_id}")
+ var redef_title = new Template
+ redef_title.add "also redef in "
+ redef_title.add mpropdef.tpl_namespace
+ redef_article.title = redef_title
+ redef_article.title_classes.add "signature info"
+ redef_article.css_classes.add "nospace"
+ var redef_content = new Template
+ if mpropdef.mdoc != null then
+ redef_content.add mpropdef.mdoc.tpl_comment
+ end
+ redef_article.content = redef_content
+ subarticle.add_child redef_article
+ end
end
- mainmodule.linearize_mpropdefs(mpropdefs)
- for mpropdef in mpropdefs do
- # add mpropdef description
- var redef_article = mpropdef.tpl_article
- redef_article.source_link = tpl_showsource(mpropdef.location)
- article.add_child redef_article
+ # Add linearization
+ if lin.length > 1 then
+ var lin_article = new TplArticle("{main_mpropdef.nitdoc_id}_lin")
+ lin_article.title = "Inheritance"
+ var lst = new TplList.with_classes(["list-unstyled", "list-labeled"])
+ for mpropdef in lin do
+ lst.add_li mpropdef.tpl_inheritance_item
+ end
+ lin_article.content = lst
+ subarticle.add_child lin_article
end
+ article.add_child subarticle
return article
end
# MProperty description template
fun tpl_mpropdef_article(mpropdef: MPropDef): TplArticle do
var article = mpropdef.tpl_article
- if mpropdef.is_intro then article.content = null
article.source_link = tpl_showsource(mpropdef.location)
return article
end
var classes = mprop.intro.tpl_css_classes.to_a
if not mprops2mdefs.has_key(mprop) then
classes.add "inherit"
- var lnk = new Template
- lnk.add new TplLabel.with_classes(classes)
- lnk.add mprop.intro.tpl_link
- return new TplListItem.with_content(lnk)
+ var cls_url = mprop.intro.mclassdef.mclass.nitdoc_url
+ var def_url = "{cls_url}#{mprop.nitdoc_id}"
+ var lnk = new TplLink(def_url, mprop.name)
+ if mprop.intro.mdoc != null then lnk.title = mprop.intro.mdoc.short_comment
+ var item = new Template
+ item.add new TplLabel.with_classes(classes)
+ item.add lnk
+ return new TplListItem.with_content(item)
end
var defs = mprops2mdefs[mprop]
if defs.has(mprop.intro) then
end
var lnk = new Template
lnk.add new TplLabel.with_classes(classes)
- lnk.add mprop.intro.tpl_anchor
+ lnk.add mprop.tpl_anchor
return new TplListItem.with_content(lnk)
end
var mclasses = new HashSet[MClass]
mclasses.add_all hancestors
mclasses.add_all hparents
- if hchildren.length < 10 then mclasses.add_all hchildren
- if hdescendants.length < 10 then mclasses.add_all hdescendants
+ mclasses.add_all hchildren
+ mclasses.add_all hdescendants
mclasses.add mclass
var graph = tpl_dot(mclasses)
if graph != null then section.add_child graph
end
# children
- if not hchildren.is_empty and hchildren.length < 15 then
+ if not hchildren.is_empty then
var lst = hchildren.to_a
name_sorter.sort lst
section.add_child tpl_list("children", "Children", lst)
end
# descendants
- if not hdescendants.is_empty and hchildren.length < 15 then
+ if not hdescendants.is_empty then
var lst = hdescendants.to_a
name_sorter.sort lst
section.add_child tpl_list("descendants", "Descendants", lst)
private fun tpl_list(id: String, title: String, elts: Array[MClass]): TplArticle do
var article = new TplArticle.with_title(id, title)
- var list = new TplList.with_classes(["list-unstyled", "list-definition"])
- for elt in elts do list.elts.add elt.tpl_list_item
- article.content = list
+ if elts.length > 20 then
+ var tpl = new Template
+ for e in elts do
+ tpl.add e.tpl_link
+ if e != elts.last then tpl.add ", "
+ end
+ article.content = tpl
+ else
+ var list = new TplList.with_classes(["list-unstyled", "list-definition"])
+ for elt in elts do list.elts.add elt.tpl_list_item
+ article.content = list
+ end
return article
end
var kind_map = sort_by_kind(mprops)
# virtual types
- var elts = kind_map["type"].to_a
- name_sorter.sort(elts)
- for elt in elts do
- var defs = mprops2mdefs[elt].to_a
- section.add_child tpl_mprop_article(elt, defs)
+ for article in tpl_mproperty_articles(kind_map, "type") do
+ section.add_child article
end
-
# constructors
- elts = kind_map["init"].to_a
- name_sorter.sort(elts)
- for elt in elts do
- var defs = mprops2mdefs[elt].to_a
- section.add_child tpl_mprop_article(elt, defs)
+ for article in tpl_mproperty_articles(kind_map, "init") do
+ section.add_child article
end
-
# methods
- elts = kind_map["fun"].to_a
- name_sorter.sort(elts)
- for elt in elts do
- var defs = mprops2mdefs[elt].to_a
- section.add_child tpl_mprop_article(elt, defs)
+ for article in tpl_mproperty_articles(kind_map, "fun") do
+ section.add_child article
end
parent.add_child section
end
end
end
+ private fun tpl_mproperty_articles(kind_map: Map[String, Set[MProperty]],
+ kind_name: String): Sequence[TplArticle] do
+ var articles = new List[TplArticle]
+ var elts = kind_map[kind_name].to_a
+ name_sorter.sort(elts)
+ for elt in elts do
+ var local_defs = mprops2mdefs[elt]
+ # var all_defs = elt.mpropdefs
+ var all_defs = new HashSet[MPropDef]
+ for local_def in local_defs do
+ all_defs.add local_def
+ var mpropdef = local_def
+ while not mpropdef.is_intro do
+ mpropdef = mpropdef.lookup_next_definition(mainmodule, mpropdef.mclassdef.bound_mtype)
+ all_defs.add mpropdef
+ end
+ end
+ var loc_lin = local_defs.to_a
+ mainmodule.linearize_mpropdefs(loc_lin)
+ var all_lin = all_defs.to_a
+ mainmodule.linearize_mpropdefs(all_lin)
+ articles.add tpl_mprop_article(loc_lin.first, loc_lin, all_lin)
+ end
+ return articles
+ end
+
redef fun tpl_content do
tpl_sidebar_properties
var top = tpl_intro
for mclass in mclasses do
poset.add_node mclass
for oclass in mclasses do
+ if mclass == oclass then continue
poset.add_node oclass
if mclass.in_hierarchy(mainmodule) < oclass then
poset.add_edge(mclass, oclass)
var op = new FlatBuffer
var name = "dep_{mclass.name}"
op.append("digraph {name} \{ rankdir=BT; node[shape=none,margin=0,width=0,height=0,fontsize=10]; edge[dir=none,color=gray]; ranksep=0.2; nodesep=0.1;\n")
- for c in poset do
+ var classes = poset.to_a
+ var todo = new Array[MClass]
+ var done = new HashSet[MClass]
+ mainmodule.linearize_mclasses(classes)
+ if not classes.is_empty then todo.add classes.first
+ while not todo.is_empty do
+ var c = todo.shift
+ if done.has(c) then continue
+ done.add c
if c == mclass then
op.append("\"{c.name}\"[shape=box,margin=0.03];\n")
else
op.append("\"{c.name}\"[URL=\"{c.nitdoc_url}\"];\n")
end
- for c2 in poset[c].direct_greaters do
- op.append("\"{c.name}\"->\"{c2.name}\";\n")
+ var smallers = poset[c].direct_smallers
+ if smallers.length < 10 then
+ for c2 in smallers do
+ op.append("\"{c2.name}\"->\"{c.name}\";\n")
+ end
+ todo.add_all smallers
+ else
+ op.append("\"...\"->\"{c.name}\";\n")
end
end
op.append("\}\n")
end
private fun tpl_intro: TplSection do
- var section = new TplSection.with_title("top", tpl_title)
- section.subtitle = mproperty.tpl_declaration
- var article = new TplArticle("comment")
- if mproperty.intro.mdoc != null then
- article.content = mproperty.intro.mdoc.tpl_comment
- end
- section.add_child article
+ var title = new Template
+ title.add mproperty.nitdoc_name
+ title.add mproperty.intro.tpl_signature
+ var section = new TplSection.with_title("top", title)
+ section.subtitle = mproperty.tpl_namespace
+ section.summary_title = mproperty.nitdoc_name
return section
end
# Content to display in the box
# box will not be rendered if the content is null
- var content: nullable Streamable writable
+ var content: nullable Streamable is writable
# Is the box opened by default
# otherwise, the user will have to clic on the title to display the content
- var is_open writable = false
+ var is_open = false is writable
init(title: String) do
self.title = title
# Title to display if any
# if both `title` and `summary_title` are null then
# the section will not appear in the summary
- var title: nullable Streamable writable
+ var title: nullable Streamable is writable
# Subtitle to display if any
- var subtitle: nullable Streamable writable
+ var subtitle: nullable Streamable is writable
# Title that appear in the summary
# if null use `title` instead
- var summary_title: nullable String writable
+ var summary_title: nullable String is writable
# CSS classes to apply on the section element
var css_classes = new Array[String]
super TplSectionElt
# Content for this article
- var content: nullable Streamable writable = null
- var source_link: nullable Streamable writable = null
+ var content: nullable Streamable = null is writable
+ var source_link: nullable Streamable = null is writable
init with_content(id: String, title: Streamable, content: Streamable) do
with_title(id, title)
super Template
# Link href
- var href: String writable
+ var href: String is writable
# Text to display in the link
- var text: Streamable writable
+ var text: Streamable is writable
# Optional title
- var title: nullable String writable
+ var title: nullable String is writable
init(href, text: String) do
self.href = href
end
end
+# A Bootstrap tab component that contains `TplTabPanel`.
+class TplTab
+ super Template
+
+ # Panels contained in the tab.
+ var panels = new Array[TplTabPanel]
+
+ # Add a new panel.
+ fun add_panel(panel: TplTabPanel) do panels.add panel
+
+ # CSS classes of the tab component.
+ var css_classes = new Array[String]
+
+ redef fun rendering do
+ add "<div class='tab-content'>"
+ for panel in panels do add panel
+ add "</div>"
+ end
+end
+
+# A panel that goes in a `TplTab`.
+class TplTabPanel
+ super Template
+
+ # CSS classes of the pane element.
+ var css_classes = new Array[String]
+
+ # The panel id.
+ #
+ # Used to show/hide panel.
+ var id: String
+
+ # The panel name.
+ #
+ # Displayed in the tab header or in the pointing link.
+ var name: Streamable
+
+ # Is the panel visible by default?
+ var is_active = false is writable
+
+ # Body of the panel
+ var content: nullable Streamable = null is writable
+
+ # Get a link pointing to this panel.
+ fun tpl_link_to: Streamable do
+ var lnk = new Template
+ lnk.add "<a data-target='#{id}' data-toggle='pill'>"
+ lnk.add name
+ lnk.add "</a>"
+ return lnk
+ end
+
+ redef fun rendering do
+ add "<div class='tab-pane {css_classes.join(" ")}"
+ if is_active then add "active"
+ add "' id='{id}'>"
+ if content != null then add content.as(not null)
+ add "</div>"
+ end
+end
+
# A label with a text content
class TplLabel
super Template
end
redef class MModule
- var c_compiler_options writable = ""
- var c_linker_options writable = ""
+ var c_compiler_options = "" is writable
+ var c_linker_options = "" is writable
end
class ForeignCType
redef class MModule
private var cpp_file: nullable CPPCompilationUnit = null
- var cpp_compiler_options writable = ""
+ var cpp_compiler_options = "" is writable
end
class CPPLanguage
var indirection_sig = mproperty.build_csignature(mclass_type, mmodule, "___cpp_impl_mid", long_signature, internal_call_context)
## In C file (__ffi.c)
-
+
# Declare the indirection function in C
ecc.body_decl.add("{indirection_sig};\n")
# FFI concers common between the compilers and the interpreter.
# Offers services to compile modules using foreign code. Mainly allows
# to wrap foreign code in Nit methods.
-module common_ffi
+module ffi
import modelbuilder
do
super
- if not npropdef isa AExternPropdef then return
+ if not npropdef isa AMethPropdef then return
var code_block = npropdef.n_extern_code_block
if code_block == null then return
# does the super module has inherited dependancies?
var hd = m.header_dependencies
- if not hd.is_empty then
+ if not hd.is_empty then
header_dependencies.add_all(hd)
end
private fun impl_java_class_name: String do return "Nit_{name}"
end
-redef class AExternPropdef
+redef class AMethPropdef
redef fun verify_nitni_callbacks(toolcontext)
do
super
# Returns the list of C functions to link with extern Java methods, as required
# to enable this callback from Java code.
- #
+ #
# Return used by `MModule::ensure_linking_callback_methods`
#
# TODO we return an Array to support cast and other features like that
private fun jni_type: String do return "jint"
# JNI short type name (for signatures)
- #
+ #
# Is used by `MMethod::build_jni_format` to pass a Java method signature
# to the JNI function `GetStaticMetodId`.
private fun jni_format: String do return "I"
redef class MMethod
# Returns the JNI signature format of this Nit method
- #
+ #
# Example: a Nity signature `(Bool, Int, Float, JavaString)` is represented by
# the JNI format `(ZIDLjava/lang/string;)V"
private fun build_jni_format(recv_mtype: MClassType, from_mmodule: MModule): String
return
end
- var args = nat.n_args
- if args.is_empty then
- modelbuilder.error(nat, "Syntax error: \"pkgconfig\" expects at least one argument.")
- return
- end
+ # retreive module
+ var nmodule = nmoduledecl.parent.as(AModule)
+ var mmodule = nmodule.mmodule.as(not null)
+ # target pkgs
var pkgs = new Array[String]
- for arg in args do
- var pkg = arg.as_string
- if pkg == null then
- modelbuilder.error(nat, "Syntax error: \"pkgconfig\" expects its arguments to be the name of the package as String literals.")
- return
- end
- pkgs.add(pkg)
+ var args = nat.n_args
+ if args.is_empty then
+ # use module name
+ pkgs.add(mmodule.name)
+ else
+ for arg in args do
+ var pkg = arg.as_string
+ if pkg == null then
+ modelbuilder.error(nat, "Syntax error: \"pkgconfig\" expects its arguments to be the name of the package as String literals.")
+ return
+ end
+
+ pkgs.add(pkg)
+ end
end
- # retreive module
- var nmodule = nmoduledecl.parent.as(AModule)
- var mmodule = nmodule.mmodule.as(not null)
-
# check availability of pkg-config
var proc_which = new IProcess("which", "pkg-config")
proc_which.wait
for m in super_mmodules do
if declared_annotations[m].has(name) then
- modelbuilder.warning(annot, "Warning: an annotation `{name}` is already declared in module `{m}`")
+ modelbuilder.warning(annot, "multiple-annotation-declarations", "Warning: an annotation `{name}` is already declared in module `{m}`")
break label
end
end
var primtives_annotations_list = """
new_annotation
+deprecated
fixed
lazy
noinit
cached
nosuper
old_style_init
+abstract
+intern
+extern
pkgconfig
c_compiler_option
if annots.has(name) then return
- toolcontext.modelbuilder.warning(nat, "Warning: unknown annotation `{name}`")
+ toolcontext.modelbuilder.warning(nat, "unknown-annotation", "Warning: unknown annotation `{name}`")
annots.add(name) # to avoid multiple errors on the same name
end
code.add "end"
- var npropdef = toolcontext.parse_propdef(code.join("\n")).as(AConcreteInitPropdef)
+ var npropdef = toolcontext.parse_propdef(code.join("\n")).as(AMethPropdef)
npropdefs.add npropdef
nclassdef.parent.as(AModule).inits_to_retype.add npropdef
end
private class PreciseTypeVisitor
super Visitor
- var npropdef: AConcreteInitPropdef
+ var npropdef: AMethPropdef
var mclassdef: MClassDef
var toolcontext: ToolContext
- init(npropdef: AConcreteInitPropdef, mclassdef: MClassDef, toolcontext: ToolContext)
+ init(npropdef: AMethPropdef, mclassdef: MClassDef, toolcontext: ToolContext)
do
self.npropdef = npropdef
self.mclassdef = mclassdef
redef class AAttrPropdef
private fun name: String
do
- if n_id == null then return n_id2.text
- return n_id.text
+ return n_id2.text
end
end
return null
end
- private var inits_to_retype = new Array[AConcreteInitPropdef]
+ private var inits_to_retype = new Array[AMethPropdef]
end
redef class AStdClassdef
var toolcontext: ToolContext
- fun warning(node: ANode, msg: String)
+ fun warning(node: ANode, tag, msg: String)
do
- toolcontext.warning(node.hot_location, msg)
+ toolcontext.warning(node.hot_location, tag, msg)
end
init(toolcontext: ToolContext)
redef fun after_simple_misc(v)
do
if self.n_opar != null and self.n_params.is_empty then
- v.warning(self, "Warning: superfluous parentheses.")
+ v.warning(self, "parentheses", "Warning: superfluous parentheses.")
end
end
end
redef class AParExpr
redef fun warn_parentheses(v)
do
- v.warning(self, "Warning: superfluous parentheses.")
+ v.warning(self, "parentheses", "Warning: superfluous parentheses.")
end
end
redef fun after_simple_misc(v)
do
if n_exprs.is_empty then
- v.warning(self, "Warning: superfluous parentheses.")
+ v.warning(self, "parentheses", "Warning: superfluous parentheses.")
end
end
end
redef fun after_simple_misc(v)
do
if n_expr isa ATrueExpr then
- v.warning(self, "Warning: use 'loop' instead of 'while true do'.")
+ v.warning(self, "loop", "Warning: use `loop` instead of `while true do`.")
else
n_expr.warn_parentheses(v)
end
redef fun accept_simple_misc(v)
do
if v.once_count > 0 then
- v.warning(self, "Useless once in a once expression.")
+ v.warning(self, "nested-once", "Warning: useless once in a once expression.")
end
v.once_count = v.once_count + 1
# Is the HTML include a nested `<span class"{type_of_node}">` element for each `ANode` of the AST?
# Used to have a really huge and verbose HTML (mainly for debug)
- var with_ast writable = false
+ var with_ast = false is writable
# The first line to generate, null if start at the first line
- var first_line: nullable Int writable = null
+ var first_line: nullable Int = null is writable
# The last line to generate, null if finish at the last line
- var last_line: nullable Int writable = null
+ var last_line: nullable Int = null is writable
init
do
do
return mtype.anchor_to(self.mainmodule, self.frame.arguments.first.mtype.as(MClassType))
end
+
+ # Placebo instance used to mark internal error result when `null` already have a meaning.
+ # TODO: replace with multiple return or something better
+ var error_instance = new MutableInstance(modelbuilder.model.null_type) is lazy
end
# An instance represents a value of the executed program.
v.call_without_varargs(superpd, arguments)
end
+ if mpropdef.is_intern or mpropdef.is_extern then
+ var res = intern_call(v, mpropdef, arguments)
+ if res != v.error_instance then return res
+ end
+
if n_block != null then
v.stmt(self.n_block)
return null
+ end
+
+ if mpropdef.is_intern then
+ fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}")
+ else if mpropdef.is_extern then
+ fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}")
else
- return intern_call(v, mpropdef, arguments)
+ fatal(v, "NOT YET IMPLEMENTED <wat?> {mpropdef}")
end
+ abort
end
+ # Interprets a intern or a shortcut extern method.
+ # Returns the result for a function, `null` for a procedure, or `error_instance` if the method is unknown.
private fun intern_call(v: NaiveInterpreter, mpropdef: MMethodDef, args: Array[Instance]): nullable Instance
do
var pname = mpropdef.mproperty.name
else if pname == "address_is_null" then
return v.false_instance
end
- if mpropdef.is_intern then
- fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}")
- else if mpropdef.is_extern then
- fatal(v, "NOT YET IMPLEMENTED extern {mpropdef}")
- else
- fatal(v, "NOT YET IMPLEMENTED <wat?> {mpropdef}")
- end
- abort
+ return v.error_instance
end
end
# The entity where the documentation is originally attached to.
# This gives some context to resolve identifiers or to run examples.
- var original_mentity: nullable MEntity writable = null
+ var original_mentity: nullable MEntity = null is writable
end
redef class MEntity
- # The documentation assiciated to the entity
- var mdoc: nullable MDoc writable
+ # The documentation associated to the entity
+ var mdoc: nullable MDoc is writable
+
+ # Is the entity deprecated?
+ #
+ # Used for warnings and in documentation.
+ # Has no other specific effect.
+ var deprecation: nullable MDeprecationInfo = null is writable
+end
+
+# Information about a deprecated entity
+class MDeprecationInfo
+ # Explanation about the deprecation
+ var mdoc: nullable MDoc = null is writable
end
# The loaded modules of this group
var mmodules = new Array[MModule]
- # Placebo stuff to find the owner (module with same name)
- # null is returned if there is no owner, or if it is not loaded yet
- fun fuzzy_owner: nullable MModule
- do
- for m in mmodules do if m.name == name then return m
- return null
- end
+ # The default module of a group (if any, and if loaded)
+ #
+ # The default module of a group is the one that has the same name.
+ # Return `null` if the group has no default module or if the default
+ # module is not loaded.
+ var default_mmodule: nullable MModule = null
end
# A Nit module is usually associated with a Nit source file.
# The model considered
redef var model: Model
- # placebo for old module nesting hierarchy
- # return null if self is not nested (ie. is a top-level module)
- #
- # TODO REMOVE, rely on mgroup instead
- var direct_owner: nullable MModule
-
# The group of module in the project if any
var mgroup: nullable MGroup
self.mgroup = mgroup
if mgroup != null then
mgroup.mmodules.add(self)
+ if mgroup.name == name then
+ assert mgroup.default_mmodule == null
+ mgroup.default_mmodule = self
+ end
# placebo for old module nesting hierarchy
- var direct_owner = mgroup.fuzzy_owner
+ var direct_owner = mgroup.default_mmodule
if direct_owner == self then
# The module is the new owner of its own group, thus adopt the other modules
for m in mgroup.mmodules do
if m == self then continue
- m.direct_owner = self
model.mmodule_nesting_hierarchy.add_edge(self, m)
end
- # The potential owner is the the fuzzy_owner of the parent group
- if mgroup.parent != null then direct_owner = mgroup.parent.fuzzy_owner
+ # The potential owner is the default_mmodule of the parent group
+ if mgroup.parent != null then direct_owner = mgroup.parent.default_mmodule
end
if direct_owner != self and direct_owner != null then
- self.direct_owner = direct_owner
model.mmodule_nesting_hierarchy.add_edge(direct_owner, self)
end
end
end
end
- # placebo for old module nesting hierarchy
- fun public_owner: nullable MModule
- do
- var mgroup = self.mgroup
- if mgroup == null then return null
- mgroup = mgroup.mproject.root
- if mgroup.mmodules.is_empty then return null
- var res = mgroup.fuzzy_owner
- if res == self then return null
- return res
- end
-
# Return true if a class or a property introduced in `intro_mmodule` with a visibility of `visibility` is visible in self.
fun is_visible(intro_mmodule: MModule, visibility: MVisibility): Bool
do
# Is the mmodule created for internal purpose?
# Fictive module are instantied internally but they should not be
# exposed to the final user
- var is_fictive: Bool writable = false
+ var is_fictive: Bool = false is writable
redef fun parent_concern do return mgroup
end
private var object_type_cache: nullable MClassType
+ # The type `Pointer`, super class to all extern classes
+ var pointer_type: MClassType = self.get_primitive_class("Pointer").mclass_type is lazy
+
# The primitive type `Bool`
fun bool_type: MClassType
do
# The type associated the a formal parameter generic type of a class
#
# Each parameter type is associated to a specific class.
-# It's mean that all refinements of a same class "share" the parameter type,
-# but that a generic subclass has its on parameter types.
+# It means that all refinements of a same class "share" the parameter type,
+# but that a generic subclass has its own parameter types.
#
# However, in the sense of the meta-model, a parameter type of a class is
# a valid type in a subclass. The "in the sense of the meta-model" is
# Is the property defined at the top_level of the module?
# Currently such a property are stored in `Object`
- var is_toplevel: Bool writable = false
+ var is_toplevel: Bool = false is writable
# Is the property a constructor?
# Warning, this property can be inherited by subclasses with or without being a constructor
# therefore, you should use `is_init_for` the verify if the property is a legal constructor for a given class
- var is_init: Bool writable = false
+ var is_init: Bool = false is writable
# The constructor is a (the) root init with empty signature but a set of initializers
- var is_root_init: Bool writable = false
+ var is_root_init: Bool = false is writable
# The the property a 'new' contructor?
- var is_new: Bool writable = false
+ var is_new: Bool = false is writable
# Is the property a legal constructor for a given class?
# As usual, visibility is not considered.
end
# The signature attached to the property definition
- var msignature: nullable MSignature writable = null
+ var msignature: nullable MSignature = null is writable
# The signature attached to the `new` call on a root-init
# This is a concatenation of the signatures of the initializers
#
# REQUIRE `mproperty.is_root_init == (new_msignature != null)`
- var new_msignature: nullable MSignature writable = null
+ var new_msignature: nullable MSignature = null is writable
# List of initialisers to call in root-inits
#
var initializers = new Array[MProperty]
# Is the method definition abstract?
- var is_abstract: Bool writable = false
+ var is_abstract: Bool = false is writable
# Is the method definition intern?
- var is_intern writable = false
+ var is_intern = false is writable
# Is the method definition extern?
- var is_extern writable = false
+ var is_extern = false is writable
end
# A local definition of an attribute
end
# The static type of the attribute
- var static_mtype: nullable MType writable = null
+ var static_mtype: nullable MType = null is writable
end
# A local definition of a virtual type
end
# The bound of the virtual type
- var bound: nullable MType writable = null
+ var bound: nullable MType = null is writable
# Is the bound fixed?
- var is_fixed writable = false
+ var is_fixed = false is writable
end
# A kind of class.
# * `public_visibility`
# * `protected_visibility`
# * `none_visibility`
+# * `private_visiblity`
#
# Note this class is basically an enum.
# FIXME: use a real enum once user-defined enums are available
end
# Should groups be shown as clusters?
- var cluster_group writable = true
+ var cluster_group = true is writable
# Should projects be shown as clusters?
- var project_group writable = true
+ var project_group = true is writable
# Recursively generate noed ans clusters for a mroup
private fun dot_cluster(o: OStream, mgroup: MGroup)
redef var model: Model
# The root of the group tree
- var root: nullable MGroup writable = null
+ var root: nullable MGroup = null is writable
# The group tree, as a POSet
var mgroups = new POSet[MGroup]
fun is_root: Bool do return mproject.root == self
# The filepath (usualy a directory) of the group, if any
- var filepath: nullable String writable
+ var filepath: nullable String is writable
init (name: String, mproject: MProject, parent: nullable MGroup)
do
# see: `MConcernRankSorter`
# Use a positive booster to push down a result in the list
# A negative booster can be used to push up the result
- var booster_rank: Int writable = 0
+ var booster_rank: Int = 0 is writable
# Concern ranking used for ordering
# see: `MConcernRankSorter`
redef class MClass
- # Get the public owner of 'self'.
- fun public_owner: MModule do
- var public_owner = self.intro_mmodule.public_owner
- if public_owner == null then
- return self.intro_mmodule
- else
- return public_owner
- end
- end
-
# Get direct parents of 'self'.
fun parents: Set[MClass] do
var ret = new HashSet[MClass]
var mdoc = ndoc.to_mdoc
mmodule.mdoc = mdoc
mdoc.original_mentity = mmodule
+ else
+ advice(decl, "missing-doc", "Documentation warning: Undocumented module `{mmodule}`")
end
end
# Helper function to display a warning on a node.
# Alias for: `self.toolcontext.warning(n.hot_location, text)`
- fun warning(n: ANode, text: String)
+ fun warning(n: ANode, tag, text: String)
+ do
+ self.toolcontext.warning(n.hot_location, tag, text)
+ end
+
+ # Helper function to display an advice on a node.
+ # Alias for: `self.toolcontext.advice(n.hot_location, text)`
+ fun advice(n: ANode, tag, text: String)
do
- self.toolcontext.warning(n.hot_location, text)
+ self.toolcontext.advice(n.hot_location, tag, text)
end
# Force to get the primitive method named `name` on the type `recv` or do a fatal error on `n`
return
end
for c in ptname.chars do if c >= 'a' and c<= 'z' then
- warning(nfd, "Warning: lowercase in the formal parameter type {ptname}")
+ warning(nfd, "formal-type-name", "Warning: lowercase in the formal parameter type {ptname}")
break
end
names.add(ptname)
nfd.bound = bound
end
if bound isa MClassType and bound.mclass.kind == enum_kind then
- warning(nfdt, "Warning: Useless formal parameter type since `{bound}` cannnot have subclasses.")
+ warning(nfdt, "useless-bound", "Warning: Useless formal parameter type since `{bound}` cannnot have subclasses.")
end
else if mclass.mclassdefs.is_empty then
# No bound, then implicitely bound by nullable Object
var mdoc = ndoc.to_mdoc
mclassdef.mdoc = mdoc
mdoc.original_mentity = mclassdef
+ else if mclassdef.is_intro and mclass.visibility >= public_visibility then
+ advice(nclassdef, "missing-doc", "Documentation warning: Undocumented public class `{mclass}`")
end
end
if not parents.has(sc) or sc == objectclass then
# Skip the warning on generated code
if ntype.location.file != null and not ntype.location.file.filename.is_empty then
- warning(ntype, "Warning: superfluous super-class {mtype} in class {mclassdef.mclass}.")
+ warning(ntype, "useless-superclass", "Warning: superfluous super-class {mtype} in class {mclassdef.mclass}.")
end
else if not seen_parents.has_key(sc) then
seen_parents[sc] = ntype
else
- warning(ntype, "Warning: duplicated super-class {mtype} in class {mclassdef.mclass}.")
+ warning(ntype, "useless-superclass", "Warning: duplicated super-class {mtype} in class {mclassdef.mclass}.")
end
end
end
redef class MPropDef
# Does the MPropDef contains a call to super or a call of a super-constructor?
# Subsequent phases of the frontend (esp. typing) set it if required
- var has_supercall: Bool writable = false
+ var has_supercall: Bool = false is writable
end
redef class AClassdef
type MPROPDEF: MPropDef
# The associated propdef once build by a `ModelBuilder`
- var mpropdef: nullable MPROPDEF writable
+ var mpropdef: nullable MPROPDEF is writable
private fun build_property(modelbuilder: ModelBuilder, mclassdef: MClassDef) is abstract
private fun build_signature(modelbuilder: ModelBuilder) is abstract
modelbuilder.error(nvisibility, "Error: The only legal visibility for properties in a private class is private.")
else if mvisibility == private_visibility then
assert nvisibility != null
- # Not yet
- # modelbuilder.warning(nvisibility, "Warning: private is unrequired since the only legal visibility for properties in a private class is private.")
+ modelbuilder.advice(nvisibility, "useless-visibility", "Warning: private is superfluous since the only legal visibility for properties in a private class is private.")
end
mvisibility = private_visibility
end
return mvisibility
end
- private fun set_doc(mpropdef: MPropDef)
+ private fun set_doc(mpropdef: MPropDef, modelbuilder: ModelBuilder)
do
var ndoc = self.n_doc
if ndoc != null then
var mdoc = ndoc.to_mdoc
mpropdef.mdoc = mdoc
mdoc.original_mentity = mpropdef
+ else if mpropdef.is_intro and mpropdef.mproperty.visibility >= protected_visibility then
+ modelbuilder.advice(self, "missing-doc", "Documentation warning: Undocumented property `{mpropdef.mproperty}`")
+ end
+
+ var at_deprecated = get_single_annotation("deprecated", modelbuilder)
+ if at_deprecated != null then
+ if not mpropdef.is_intro then
+ modelbuilder.error(self, "Error: method redefinition cannot be deprecated.")
+ else
+ var info = new MDeprecationInfo
+ ndoc = at_deprecated.n_doc
+ if ndoc != null then info.mdoc = ndoc.to_mdoc
+ mpropdef.mproperty.deprecation = info
+ end
end
end
if not is_init or n_kwredef != null then mprop = modelbuilder.try_get_mproperty_by_name(name_node, mclassdef, name).as(nullable MMethod)
if mprop == null and look_like_a_root_init(modelbuilder) then
mprop = modelbuilder.the_root_init_mmethod
+ var nb = n_block
+ if nb isa ABlockExpr and nb.n_expr.is_empty and n_doc == null then
+ modelbuilder.advice(self, "useless-init", "Warning: useless empty init in {mclassdef}")
+ end
end
if mprop == null then
var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
var mpropdef = new MMethodDef(mclassdef, mprop, self.location)
- set_doc(mpropdef)
+ set_doc(mpropdef, modelbuilder)
self.mpropdef = mpropdef
modelbuilder.mpropdef2npropdef[mpropdef] = self
msignature = new MSignature(mparameters, ret_type)
mpropdef.msignature = msignature
- mpropdef.is_abstract = self isa ADeferredMethPropdef
- mpropdef.is_intern = self isa AInternMethPropdef
- mpropdef.is_extern = self isa AExternPropdef
+ mpropdef.is_abstract = self.get_single_annotation("abstract", modelbuilder) != null
+ mpropdef.is_intern = self.get_single_annotation("intern", modelbuilder) != null
+ mpropdef.is_extern = self.n_extern_code_block != null or self.get_single_annotation("extern", modelbuilder) != null
end
redef fun check_signature(modelbuilder)
var mlazypropdef: nullable MAttributeDef
# The associated getter (read accessor) if any
- var mreadpropdef: nullable MMethodDef writable
+ var mreadpropdef: nullable MMethodDef is writable
# The associated setter (write accessor) if any
- var mwritepropdef: nullable MMethodDef writable
+ var mwritepropdef: nullable MMethodDef is writable
redef fun build_property(modelbuilder, mclassdef)
do
var mclass = mclassdef.mclass
var name: String
- if self.n_id != null then
- name = self.n_id.text
- else
- name = self.n_id2.text
- end
+ name = self.n_id2.text
if mclass.kind == interface_kind or mclassdef.mclass.kind == enum_kind then
modelbuilder.error(self, "Error: Attempt to define attribute {name} in the interface {mclass}.")
modelbuilder.error(self, "Error: Attempt to define attribute {name} in the extern class {mclass}.")
end
- var nid = self.n_id
- if nid != null then
- # Old attribute style
- var mprop = modelbuilder.try_get_mproperty_by_name(nid, mclassdef, name)
- if mprop == null then
- var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
- mprop = new MAttribute(mclassdef, name, mvisibility)
- if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, false, mprop) then return
- else
- assert mprop isa MAttribute
- check_redef_property_visibility(modelbuilder, self.n_visibility, mprop)
- if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, true, mprop) then return
- end
- mclassdef.mprop2npropdef[mprop] = self
-
- var mpropdef = new MAttributeDef(mclassdef, mprop, self.location)
- self.mpropdef = mpropdef
- modelbuilder.mpropdef2npropdef[mpropdef] = self
- set_doc(mpropdef)
+ # New attribute style
+ var nid2 = self.n_id2
+ var mprop = new MAttribute(mclassdef, "_" + name, private_visibility)
+ var mpropdef = new MAttributeDef(mclassdef, mprop, self.location)
+ self.mpropdef = mpropdef
+ modelbuilder.mpropdef2npropdef[mpropdef] = self
+ set_doc(mpropdef, modelbuilder)
- var nreadable = self.n_readable
- if nreadable != null then modelbuilder.error(nreadable, "Error: old-style getter no more supported")
- var nwritable = self.n_writable
- if nwritable != null then modelbuilder.error(nwritable, "Error: old-style setter no more supported")
+ var readname = name
+ var mreadprop = modelbuilder.try_get_mproperty_by_name(nid2, mclassdef, readname).as(nullable MMethod)
+ if mreadprop == null then
+ var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
+ mreadprop = new MMethod(mclassdef, readname, mvisibility)
+ if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, false, mreadprop) then return
+ mreadprop.deprecation = mprop.deprecation
else
- # New attribute style
- var nid2 = self.n_id2.as(not null)
- var mprop = new MAttribute(mclassdef, "_" + name, private_visibility)
- var mpropdef = new MAttributeDef(mclassdef, mprop, self.location)
- self.mpropdef = mpropdef
- modelbuilder.mpropdef2npropdef[mpropdef] = self
- set_doc(mpropdef)
-
- var readname = name
- var mreadprop = modelbuilder.try_get_mproperty_by_name(nid2, mclassdef, readname).as(nullable MMethod)
- if mreadprop == null then
- var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
- mreadprop = new MMethod(mclassdef, readname, mvisibility)
- if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, false, mreadprop) then return
- else
- if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, true, mreadprop) then return
- check_redef_property_visibility(modelbuilder, self.n_visibility, mreadprop)
- end
- mclassdef.mprop2npropdef[mreadprop] = self
+ if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, true, mreadprop) then return
+ check_redef_property_visibility(modelbuilder, self.n_visibility, mreadprop)
+ end
+ mclassdef.mprop2npropdef[mreadprop] = self
- var mreadpropdef = new MMethodDef(mclassdef, mreadprop, self.location)
- self.mreadpropdef = mreadpropdef
- modelbuilder.mpropdef2npropdef[mreadpropdef] = self
- mreadpropdef.mdoc = mpropdef.mdoc
+ var mreadpropdef = new MMethodDef(mclassdef, mreadprop, self.location)
+ self.mreadpropdef = mreadpropdef
+ modelbuilder.mpropdef2npropdef[mreadpropdef] = self
+ mreadpropdef.mdoc = mpropdef.mdoc
- var atlazy = self.get_single_annotation("lazy", modelbuilder)
- if atlazy != null then
- if n_expr == null then
- modelbuilder.error(atlazy, "Error: a lazy attribute needs a value")
- end
- is_lazy = true
- var mlazyprop = new MAttribute(mclassdef, "lazy _" + name, none_visibility)
- var mlazypropdef = new MAttributeDef(mclassdef, mlazyprop, self.location)
- self.mlazypropdef = mlazypropdef
+ var atlazy = self.get_single_annotation("lazy", modelbuilder)
+ if atlazy != null then
+ if n_expr == null then
+ modelbuilder.error(atlazy, "Error: a lazy attribute needs a value")
end
+ is_lazy = true
+ var mlazyprop = new MAttribute(mclassdef, "lazy _" + name, none_visibility)
+ var mlazypropdef = new MAttributeDef(mclassdef, mlazyprop, self.location)
+ self.mlazypropdef = mlazypropdef
+ end
- var atreadonly = self.get_single_annotation("readonly", modelbuilder)
- if atreadonly != null then
- if n_expr == null then
- modelbuilder.error(atreadonly, "Error: a readonly attribute needs a value")
- end
- # No setter, so just leave
- return
+ var atreadonly = self.get_single_annotation("readonly", modelbuilder)
+ if atreadonly != null then
+ if n_expr == null then
+ modelbuilder.error(atreadonly, "Error: a readonly attribute needs a value")
end
+ # No setter, so just leave
+ return
+ end
- var writename = name + "="
- var nwritable = self.n_writable
- var atwritable = self.get_single_annotation("writable", modelbuilder)
- if atwritable != null then
- if not atwritable.n_args.is_empty then
- writename = atwritable.arg_as_id(modelbuilder) or else writename
- end
+ var writename = name + "="
+ var atwritable = self.get_single_annotation("writable", modelbuilder)
+ if atwritable != null then
+ if not atwritable.n_args.is_empty then
+ writename = atwritable.arg_as_id(modelbuilder) or else writename
end
- var mwriteprop = modelbuilder.try_get_mproperty_by_name(nid2, mclassdef, writename).as(nullable MMethod)
- var nwkwredef: nullable Token = null
- if nwritable != null then nwkwredef = nwritable.n_kwredef
- if atwritable != null then nwkwredef = atwritable.n_kwredef
- if mwriteprop == null then
- var mvisibility
- if nwritable != null then
- mvisibility = new_property_visibility(modelbuilder, mclassdef, nwritable.n_visibility)
- else if atwritable != null then
- mvisibility = new_property_visibility(modelbuilder, mclassdef, atwritable.n_visibility)
- else
- mvisibility = private_visibility
- end
- mwriteprop = new MMethod(mclassdef, writename, mvisibility)
- if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef, false, mwriteprop) then return
+ end
+ var mwriteprop = modelbuilder.try_get_mproperty_by_name(nid2, mclassdef, writename).as(nullable MMethod)
+ var nwkwredef: nullable Token = null
+ if atwritable != null then nwkwredef = atwritable.n_kwredef
+ if mwriteprop == null then
+ var mvisibility
+ if atwritable != null then
+ mvisibility = new_property_visibility(modelbuilder, mclassdef, atwritable.n_visibility)
else
- if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef or else n_kwredef, true, mwriteprop) then return
- if nwritable != null then
- check_redef_property_visibility(modelbuilder, nwritable.n_visibility, mwriteprop)
- else if atwritable != null then
- check_redef_property_visibility(modelbuilder, atwritable.n_visibility, mwriteprop)
- end
+ mvisibility = private_visibility
+ end
+ mwriteprop = new MMethod(mclassdef, writename, mvisibility)
+ if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef, false, mwriteprop) then return
+ mwriteprop.deprecation = mprop.deprecation
+ else
+ if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef or else n_kwredef, true, mwriteprop) then return
+ if atwritable != null then
+ check_redef_property_visibility(modelbuilder, atwritable.n_visibility, mwriteprop)
end
- mclassdef.mprop2npropdef[mwriteprop] = self
-
- var mwritepropdef = new MMethodDef(mclassdef, mwriteprop, self.location)
- self.mwritepropdef = mwritepropdef
- modelbuilder.mpropdef2npropdef[mwritepropdef] = self
- mwritepropdef.mdoc = mpropdef.mdoc
end
+ mclassdef.mprop2npropdef[mwriteprop] = self
+
+ var mwritepropdef = new MMethodDef(mclassdef, mwriteprop, self.location)
+ self.mwritepropdef = mwritepropdef
+ modelbuilder.mpropdef2npropdef[mwritepropdef] = self
+ mwritepropdef.mdoc = mpropdef.mdoc
end
redef fun build_signature(modelbuilder)
else if ntype != null then
if nexpr isa ANewExpr then
var xmtype = modelbuilder.resolve_mtype(mmodule, mclassdef, nexpr.n_type)
- if xmtype == mtype and modelbuilder.toolcontext.opt_warn.value >= 2 then
- modelbuilder.warning(ntype, "Warning: useless type definition")
+ if xmtype == mtype then
+ modelbuilder.advice(ntype, "useless-type", "Warning: useless type definition")
end
end
end
var mwritepropdef = self.mwritepropdef
if mwritepropdef != null then
var name: String
- if n_id != null then
- name = n_id.text.substring_from(1)
- else
- name = n_id2.text
- end
+ name = n_id2.text
var mparameter = new MParameter(name, mtype, false)
var msignature = new MSignature([mparameter], null)
mwritepropdef.msignature = msignature
var mvisibility = new_property_visibility(modelbuilder, mclassdef, self.n_visibility)
mprop = new MVirtualTypeProp(mclassdef, name, mvisibility)
for c in name.chars do if c >= 'a' and c<= 'z' then
- modelbuilder.warning(n_id, "Warning: lowercase in the virtual type {name}")
+ modelbuilder.warning(n_id, "bad-type-name", "Warning: lowercase in the virtual type {name}")
break
end
if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, false, mprop) then return
var mpropdef = new MVirtualTypeDef(mclassdef, mprop, self.location)
self.mpropdef = mpropdef
modelbuilder.mpropdef2npropdef[mpropdef] = self
- set_doc(mpropdef)
+ set_doc(mpropdef, modelbuilder)
var atfixed = get_single_annotation("fixed", modelbuilder)
if atfixed != null then
end
if p.mclassdef.mclass == mclassdef.mclass then
# Still a warning to pass existing bad code
- modelbuilder.warning(n_type, "Redef Error: a virtual type cannot be refined.")
+ modelbuilder.warning(n_type, "refine-type", "Redef Error: a virtual type cannot be refined.")
break
end
if not bound.is_subtype(mmodule, anchor, supbound) then
# Save and load `Model` from/to Neo4j base.
#
# Nit models are composed by MEntities.
-# This module creates NeoNode for each MEntity found in a `Model` and save them into Neo4j database.
+# This module creates NeoNode for each MEntity found in a `Model` and save them
+# into Neo4j database.
#
# see `Neo4jClient`.
#
#
# Structure of the nit `Model` in base:
#
+# Note : Any null or empty attribute will not be saved in the database.
+#
+# For any `MEntity` (in addition to specific data):
+#
+# * labels: model name (`model_name`) and `MEntity`.
+# * `name`: short (unqualified) name.
+# * `mdoc`: JSON array representing the associated Markdown documentation
+# (one item by line).
+#
+# Note : All nodes described here are MEntities.
+#
# `MProject`
#
-# * labels: `model_name`, `MEntity`, `MProject`
-# * `(:MProject)-[:ROOT]->(:MGroup)`
+# * labels: `MProject`, `model_name` and `MEntity`.
+# * `(:MProject)-[:ROOT]->(:MGroup)`: root of the group tree.
#
# `MGroup`
#
-# * labels: `model_name`, `MEntity`, `MGroup`
-# * `(:MGroup)-[:PROJECT]->(:MProject)`
-# * `(:MGroup)-[:PARENT]->(:MGroup)`
+# * labels: `MGroup`, `model_name` and `MEntity`.
+# * `full_name`: fully qualified name.
+# * `(:MGroup)-[:PROJECT]->(:MProject)`: associated project.
+# * `(:MGroup)-[:PARENT]->(:MGroup)`: parent group. Does not exist for the root
+# group.
+# * `(:MGroup)-[:DECLARES]->(:MModule)`: modules that are direct children of
+# this group.
+# * `(:MGroup)-[:NESTS]->(:MGroup)`: nested groups that are direct children of
+# this group.
#
# `MModule`
#
-# * labels: `model_name`, `MEntity`, `MModule`
-# * `(:MModule)-[:IMPORTS]->(:MModule)`
-# * `(:MModule)-[:INTRODUCES]->(:MClass)`
-# * `(:MModule)-[:DEFINES]->(:MClassDef)`
+# * labels: `MModule`, `model_name` and `MEntity`.
+# * `full_name`: fully qualified name.
+# * `location`: origin of the definition. SEE: `Location.to_s`
+# * `(:MModule)-[:IMPORTS]->(:MModule)`: modules that are imported directly.
+# * `(:MModule)-[:INTRODUCES]->(:MClass)`: all by classes introduced by this
+# module.
+# * `(:MModule)-[:DEFINES]->(:MClassDef)`: all class definitons contained in
+# this module.
#
# `MClass`
#
-# * labels: `model_name`, `MEntity`, `MClass`
-# * `(:MClass)-[:CLASSTYPE]->(:MClassType)`
+# * labels: `MClass`, `model_name` and `MEntity`.
+# * `full_name`: fully qualified name.
+# * `arity`: number of generic formal parameters. 0 if the class is not generic.
+# * `kind`: kind of the class (`interface`, `abstract class`, etc.)
+# * `visibility`: visibility of the class.
+# * `(:MClass)-[:CLASSTYPE]->(:MClassType)`: SEE: `MClass.mclass_type`
+#
+# Arguments in the `CLASSTYPE` are named following the `parameter_names`
+# attribute of the `MClassDef` that introduces the class. A class definition
+# introduces a class if and only if it has this class as `MCLASS` and
+# has `is_intro` set to `true`.
#
# `MClassDef`
#
-# * labels: `model_name`, `MEntity`, `MClassDef`
-# * `(:MClassDef)-[:BOUNDTYPE]->(:MClassType)`
-# * `(:MClassDef)-[:MCLASS]->(:MClass)`
-# * `(:MClassDef)-[:INTRODUCES]->(:MProperty)`
-# * `(:MClassDef)-[:DECLARES]->(:MPropDef)`
+# * labels: `MClassDef`, `model_name` and `MEntity`.
+# * `is_intro`: Does this definition introduce the class?
+# * `location`: origin of the definition. SEE: `Location.to_s`
+# * `parameter_names`: JSON array listing the name of each formal generic
+# parameter (in order of declaration).
+# * `(:MClassDef)-[:BOUNDTYPE]->(:MClassType)`: bounded type associated to the
+# classdef.
+# * `(:MClassDef)-[:MCLASS]->(:MClass)`: associated `MClass`.
+# * `(:MClassDef)-[:INTRODUCES]->(:MProperty)`: all properties introduced by
+# the classdef.
+# * `(:MClassDef)-[:DECLARES]->(:MPropDef)`: all property definitions in the
+# classdef (introductions and redefinitions).
+# * `(:MClassDef)-[:INHERITS]->(:MClassType)`: all declared super-types
#
# `MProperty`
#
-# * labels: `model_name`, `MEntity`, `MProperty`
-# * `(:MProperty)-[:INTRO_CLASSDEF]->(:MClassDef)`
-#
-# MProperties can also have labels `MMethod`, `MAttribute`, `MVirtualTypeProp`.
+# * labels: `MProperty`, `model_name` and `MEntity`. Must also have `MMethod`,
+# `MAttribute` or `MVirtualTypeProp`, depending on the class of the represented
+# entity.
+# * `full_name`: fully qualified name.
+# * `visibility`: visibility of the property.
+# * `is_init`: Indicates if the property is a constructor. Exists only if the
+# node is a `MMethod`.
+# * `(:MProperty)-[:INTRO_CLASSDEF]->(:MClassDef)`: classdef that introduces
+# the property.
#
# `MPropDef`
#
-# * labels: `model_name`, `MEntity`, `MPropDef`
-# * `(:MPropDef)-[:DEFINES]->(:MProperty)`
+# * labels: `MPropDef`, `model_name` and `MEntity`. Must also have `MMethodDef`,
+# `MAttributeDef` or `MVirtualTypeDef`, depending on the class of the
+# represented entity.
+# * `is_intro`: Does this definition introduce the property?
+# * `location`: origin of the definition. SEE: `Location.to_s`.
+# * `(:MPropDef)-[:DEFINES]->(:MProperty)`: associated property.
#
-# MPropdefs can also have labels `MMethodDef`, `MAttributeDef`, `MVirtualTypeDef`.
+# Additional attributes and relationship for `MMethodDef`:
#
-# `MMethodDef` are linked to a `MSignature`:
+# * `is_abstract`: Is the method definition abstract?
+# * `is_intern`: Is the method definition intern?
+# * `is_extern`: Is the method definition extern?
+# * `(:MMethodDef)-[:SIGNATURE]->(:MSignature)`: signature attached to the
+# property definition.
#
-# * `(:MMethodDef)-[:SIGNATURE]->(:MSignature)`
+# Additional relationship for `MVirtualTypeDef`:
#
-# `MVirtualTypeDef` are linked to a `MType` (its `bound`):
-#
-# * `(:MVirtualTypeDef)-[:BOUND]->(:MType)`
+# * `(:MVirtualTypeDef)-[:BOUND]->(:MType)`: type to which the virtual type
+# is bound in this definition. Exists only if this definition bound the virtual
+# type to an effective type.
#
# `MType`
#
-# * labels: `model_name`, `MEntity`, `MType`
+# * labels: `MType`, `model_name` and `MEntity`. Must also have `MClassType`,
+# `MNullableType`, `MVirtualType` or `MSignature`, depending on the class of
+# the represented entity.
+#
+# Additional label and relationships for `MClassType`:
#
-# MTypes can also have labels `MClassType`, `MGenericType`, `MNullableType`, `MVirtualType`
-# and `MSignature`.
+# * If it is a `MGenericType`, also has the `MGenericType` label.
+# * `(:MClassType)-[:CLASS]->(:MClass)`: SEE: `MClassType.mclass`
+# * `(:MClassType)-[:ARGUMENT]->(:MType)`: type arguments.
#
-# `MClassType` and `MGenericType` both point to a `MClass` and have type `arguments`:
+# Arguments are named following the `parameter_names` attribute of the
+# `MClassDef` that introduces the class referred by `CLASS`.
#
-# * `(:MClassType)-[:CLASS]->(:MClass)`
-# * `(:MClassType)-[:ARGUMENT]->(:MType)`
+# Additional relationship for `MVirtualType`:
#
-# `MVirtualType` points to its introducing `MProperty`:
+# * `(:MVirtualType)-[:PROPERTY]->(:MProperty)`: associated property that
+# determines the type (usually a `MVirtualTypeProp`).
#
-# * `(:MVirtualType)-[:PROPERTY]->(:MVirtualTypeDef)`
+# Additional attribute and relationship for `MParameterType`:
#
-# `MParameterType` points to its introducing `MClass`:
+# * `rank`: position of the parameter (0 for the first parameter).
+# * `(:MParameterType)-[:CLASS]->(:MClass)`: generic class where the parameter
+# belong.
#
-# * `(:MParameterType)-[:CLASS]->(:MClass)`
+# Additional relationship for `MNullableType`:
#
-# `MNullableType` points to its non-nullable `MType`:
+# * `(:MNullableType)-[:TYPE]->(:MType)`: base type of the nullable type.
#
-# * `(:MNullableType)-[:TYPE]->(:MType)`
+# Additional attribute and relationships for `MSignature`:
#
-# `MSignature` can have `parameters` and a `return_mtype`:
+# * `parameter_names`: JSON array representing the list of the parameter names.
+# * `(:MSignature)-[:PARAMETER]->(:MParameter)`: parameters.
+# * `(:MSignature)-[:RETURNTYPE]->(:MType)`: return type. Does not exist for
+# procedures.
#
-# * `(:MSignature)-[:PARAMETER]->(:MParameter)`
-# * `(:MSignature)-[:RETURNTYPE]->(:MType)`
+# In order to maintain the correct parameters order, each `MSignature` node
+# contains an array of parameter names corresponding to the parameter order in
+# the signature.
+#
+# For example, if the source code contains:
+#
+# fun foo(a: A, b: B, c: C)
+#
+# The `MSignature` node will contain a property
+# `parameter_names = ["a", "b", "c"]` so the MSignature can be reconstructed
+# with the parameters in the correct order.
#
# `MParameter`
#
-# * labels: `model_name`, `MEntity`, `MParameter`
-# * `(:MParameter)-[:TYPE]->(:MType)`
+# * labels: `MParameter`, `model_name` and `MEntity`.
+# * `is_vararg`: Is the parameter a vararg?
+# * `rank`: position of the parameter (0 for the first parameter).
+# * `(:MParameter)-[:TYPE]->(:MType)`: static type of the parameter.
+#
+# MParameters are also ranked by their position in the corresponding signature.
+# Rank 0 for the first parameter, 1 for the next one and etc.
module neo
import model
node.out_edges.add(new NeoEdge(node, "TYPE", to_node(mtype.mtype)))
else if mtype isa MSignature then
node.labels.add "MSignature"
+ var names = new JsonArray
+ var rank = 0
for mparameter in mtype.mparameters do
- node.out_edges.add(new NeoEdge(node, "PARAMETER", to_node(mparameter)))
+ names.add mparameter.name
+ var pnode = to_node(mparameter)
+ pnode["rank"] = rank
+ node.out_edges.add(new NeoEdge(node, "PARAMETER", pnode))
end
+ if not names.is_empty then node["parameter_names"] = names
var return_mtype = mtype.return_mtype
if return_mtype != null then
node.out_edges.add(new NeoEdge(node, "RETURNTYPE", to_node(return_mtype)))
mentities[node] = mtype
return mtype
else if node.labels.has("MSignature") then
- var mparameters = new Array[MParameter]
+ # Get all param nodes
+ var mparam_nodes = new HashMap[String, MParameter]
for pnode in node.out_nodes("PARAMETER") do
- mparameters.add to_mparameter(model, pnode)
+ var mparam = to_mparameter(model, pnode)
+ mparam_nodes[mparam.name] = mparam
+ end
+ # Load params in the good order
+ var mparam_names = node["parameter_names"]
+ var mparameters = new Array[MParameter]
+ if mparam_names isa JsonArray then
+ for mparam_name in mparam_names do
+ var mparam = mparam_nodes[mparam_name.to_s]
+ mparameters.add mparam
+ end
end
var return_mtype: nullable MType = null
var ret_nodes = node.out_nodes("RETURNTYPE")
# Create a tool context to handle options and paths
var toolcontext = new ToolContext
-toolcontext.tooldescription = "Usage: nit [OPTION]... <file.nit>...\nInterprets and debbugs Nit programs."
+toolcontext.tooldescription = "Usage: nit [OPTION]... <file.nit>...\nInterprets and debugs Nit programs."
# Add an option "-o" to enable compatibilit with the tests.sh script
var opt = new OptionString("compatibility (does noting)", "-o")
toolcontext.option_context.add_option(opt)
redef fun process_npropdef(npropdef)
do
- if not npropdef isa AExternPropdef then return
+ if not npropdef isa AMethPropdef then return
+ var mpropdef = npropdef.mpropdef
+ if mpropdef == null then return
+ if not mpropdef.is_extern then return
npropdef.verify_nitni_callbacks(toolcontext)
end
end
end
-redef class AExternPropdef
+redef class AMethPropdef
private var foreign_callbacks_cache: nullable ForeignCallbackSet = null
# All foreign callbacks from this method
redef fun accept_rapid_type_visitor(v)
do
+ if foreign_callbacks_cache == null then return
+
for cb in foreign_callbacks.callbacks do v.add_send(cb.recv_mtype, cb.mproperty.as(MMethod))
for cast in foreign_callbacks.casts do v.add_cast_type(cast.to)
for sup in foreign_callbacks.supers do
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# A program that collect potential style and code issues
+module nitpick
+
+import frontend
+
+redef class ToolContext
+ # Modules to analyze, other modules will only get a shallow processing.
+ var mmodules_to_check = new HashSet[MModule]
+ redef fun phase_process_npropdef(phase, npropdef)
+ do
+ var pd = npropdef.mpropdef
+
+ # Do not analyze the property bodies outside specified modules
+ if pd != null and not mmodules_to_check.has(pd.mclassdef.mmodule) then return
+ super
+ end
+end
+
+# Create a tool context to handle options and paths
+var toolcontext = new ToolContext
+toolcontext.tooldescription = "Usage: nitpick [OPTION]... <file.nit>...\nCollect potential style and code issues."
+
+# We do not add other options, so process them now!
+toolcontext.process_options(args)
+
+# Get arguments
+var arguments = toolcontext.option_context.rest
+
+# We need a model to collect stuffs
+var model = new Model
+# A model builder to parse files
+var modelbuilder = new ModelBuilder(model, toolcontext)
+
+# Here we load an process all modules passed on the command line
+var mmodules = modelbuilder.parse(arguments)
+toolcontext.mmodules_to_check.add_all mmodules
+
+modelbuilder.run_phases
redef fun accept_pretty_printer(v) do
v.visit n_atid
if not n_args.is_empty then
- v.visit n_opar
+ if n_opar == null then
+ v.adds
+ else
+ v.visit n_opar
+ end
v.visit_list n_args
v.visit n_cpar
end
super
v.visit n_kwvar
v.adds
- if n_id != null then v.visit n_id
- if n_id2 != null then v.visit n_id2
+ v.visit n_id2
if n_type != null then
v.consume ":"
v.visit n_type
end
- if n_readable != null then
- v.adds
- v.visit n_readable
- end
-
- if n_writable != null then
- v.adds
- v.visit n_writable
- end
-
if n_expr != null then
v.adds
v.consume "="
redef class AMethPropdef
redef fun accept_pretty_printer(v) do
+ # TODO: Handle extern annotations
+
+ var before = v.indent
+ var can_inline = v.can_inline(self)
super
if n_kwinit != null then v.visit n_kwinit
if n_kwmeth != null then v.visit n_kwmeth
else
v.adds
end
- end
-
- # Can be inlined if:
- # * block is empty or can be inlined
- # * contains no comments
- redef fun is_inlinable do
- if not super then return false
- if n_annotations != null and not n_annotations.is_inlinable then return false
- if n_block != null and not n_block.is_inlinable then return false
- if not collect_comments.is_empty then return false
- return true
- end
-end
-
-redef class AMainMethPropdef
- redef fun accept_pretty_printer(v) do
- v.visit n_block
- v.addn
- end
-end
-
-redef class ADeferredMethPropdef
- redef fun accept_pretty_printer(v) do
- super
- if n_annotations == null then
- while not v.current_token isa TKwis do v.skip
- v.consume "is"
- v.adds
- while not v.current_token isa TKwabstract do v.skip
- v.consume "abstract"
- end
- v.finish_line
- v.addn
- end
-end
-
-redef class AExternPropdef
- redef fun accept_pretty_printer(v) do
- super
- while v.current_token isa TEol do v.skip
- if v.current_token isa TKwis then
- v.consume "is"
- v.adds
+ if n_extern_calls != null or n_extern_code_block != null then
+ if n_annotations != null then v.adds
+ if n_extern_calls != null then v.visit n_extern_calls
+ if n_extern_code_block != null then v.visit n_extern_code_block
end
- if v.current_token isa TKwextern then
- v.consume "extern"
- v.adds
- end
-
- if n_extern != null then v.visit n_extern
- if n_extern_calls != null then v.visit n_extern_calls
- if n_extern_code_block != null then v.visit n_extern_code_block
- v.finish_line
- v.addn
- end
-
- redef fun is_inlinable do
- if not super then return false
- if n_block != null and not n_block.is_inlinable then return false
- if n_extern_calls != null and not n_extern_calls.is_inlinable then return false
- if n_extern_code_block != null and not n_extern_code_block.is_inlinable then return false
- return true
- end
-
- redef fun must_be_inline do
- if super then return true
- return n_extern != null
- end
-end
-
-redef class AInternMethPropdef
- redef fun accept_pretty_printer(v) do
- super
- v.consume "is"
- v.adds
- v.consume "intern"
- v.finish_line
- v.addn
- end
-end
-
-redef class AConcreteMethPropdef
- redef fun accept_pretty_printer(v) do
- var before = v.indent
- var can_inline = v.can_inline(self)
- super
var n_block = self.n_block
if n_block != null then
v.addn
assert v.indent == before
end
+
+ # Can be inlined if:
+ # * block is empty or can be inlined
+ # * contains no comments
+ redef fun is_inlinable do
+ if not super then return false
+ if n_annotations != null and not n_annotations.is_inlinable then return false
+ if n_block != null and not n_block.is_inlinable then return false
+ if n_extern_calls != null and not n_extern_calls.is_inlinable then return false
+ if n_extern_code_block != null and not n_extern_code_block.is_inlinable then return false
+ if not collect_comments.is_empty then return false
+ return true
+ end
+end
+
+redef class AMainMethPropdef
+ redef fun accept_pretty_printer(v) do
+ v.visit n_block
+ v.addn
+ end
end
redef class ASignature
end
end
-redef class AAble
- redef fun accept_pretty_printer(v) do
- if n_kwredef != null then
- v.visit n_kwredef
- v.adds
- end
-
- if not n_visibility isa APublicVisibility then
- v.visit n_visibility
- v.adds
- end
- end
-end
-
-redef class AReadAble
- redef fun accept_pretty_printer(v) do
- super
- v.visit n_kwreadable
- end
-end
-
-redef class AWriteAble
- redef fun accept_pretty_printer(v) do
- super
- v.visit n_kwwritable
- end
-end
-
# Exprs
redef class AVardeclExpr
redef fun bin_op do return "*"
end
+redef class AStarstarExpr
+ redef fun bin_op do return "**"
+end
+
redef class AStarshipExpr
redef fun bin_op do return "<=>"
end
module_name = "{mmodule.name}_serial"
module_path = null
else if module_path.has_suffix(".nit") then
- module_name = mmodule.name.basename(".nit")
+ module_name = module_path.basename(".nit")
else
module_name = module_path.basename("")
module_path += ".nit"
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# UML generator in dot format.
+module nituml
+
+import modelbuilder
+import frontend
+import uml
+
+redef class ToolContext
+ var umlphase: Phase = new UMLPhase(self, null)
+
+ var opt_gen = new OptionEnum(["class", "package"], "Choose which type of uml diagram to generate", 0, "--diagram")
+
+ redef init do
+ option_context.add_option opt_gen
+ super
+ end
+end
+
+private class UMLPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule, mmodules)
+ do
+ var d = new UMLModel(mainmodule.model, mainmodule, toolcontext)
+ if toolcontext.opt_gen.value == 0 then
+ print d.generate_class_uml.write_to_string
+ else if toolcontext.opt_gen.value == 1 then
+ print d.generate_package_uml.write_to_string
+ end
+ end
+end
+
+# process options
+var toolcontext = new ToolContext
+toolcontext.process_options(args)
+var arguments = toolcontext.option_context.rest
+
+# build model
+var model = new Model
+var mbuilder = new ModelBuilder(model, toolcontext)
+var mmodules = mbuilder.parse(arguments)
+
+if mmodules.is_empty then return
+mbuilder.run_phases
+toolcontext.run_global_phases(mmodules)
end
end
-redef class AAttrPropdef
- private fun read_accessor: String do
- var ret = "fun "
- #FIXME bug with standard::stream::FDStream::fd
- var name = mreadpropdef.mproperty.name
- if mpropdef.mproperty.visibility.to_s == "public" then ret = "{ret}{name.green}"
- if mpropdef.mproperty.visibility.to_s == "private" then ret = "{ret}{name.red}"
- if mpropdef.mproperty.visibility.to_s == "protected" then ret = "{ret}{name.yellow}"
- ret = "{ret}: {n_type.to_s}"
- if n_kwredef != null then ret = "redef {ret}"
- return ret
- end
-
- private fun write_accessor: String do
- var ret = "fun "
- var name = "{mreadpropdef.mproperty.name}="
- if n_readable != null and n_readable.n_visibility != null then
- if n_readable.n_visibility isa APublicVisibility then ret = "{ret}{name.green}"
- if n_readable.n_visibility isa APrivateVisibility then ret = "{ret}{name.red}"
- if n_readable.n_visibility isa AProtectedVisibility then ret = "{ret}{name.yellow}"
- else
- ret = "{ret}{name.red}"
- end
- ret = "{ret}({mreadpropdef.mproperty.name}: {n_type.to_s})"
- if n_kwredef != null then ret = "redef {ret}"
- return ret
- end
-end
-
# Redef String class to add a function to color the string
redef class String
end
end
-redef class TKwreadable
+redef class TKwvar
redef fun parser_index: Int
do
return 16
end
end
-redef class TKwwritable
+redef class TKwextern
redef fun parser_index: Int
do
return 17
end
end
-redef class TKwvar
+redef class TKwpublic
redef fun parser_index: Int
do
return 18
end
end
-redef class TKwintern
+redef class TKwprotected
redef fun parser_index: Int
do
return 19
end
end
-redef class TKwextern
+redef class TKwprivate
redef fun parser_index: Int
do
return 20
end
end
-redef class TKwpublic
+redef class TKwintrude
redef fun parser_index: Int
do
return 21
end
end
-redef class TKwprotected
+redef class TKwif
redef fun parser_index: Int
do
return 22
end
end
-redef class TKwprivate
+redef class TKwthen
redef fun parser_index: Int
do
return 23
end
end
-redef class TKwintrude
+redef class TKwelse
redef fun parser_index: Int
do
return 24
end
end
-redef class TKwif
+redef class TKwwhile
redef fun parser_index: Int
do
return 25
end
end
-redef class TKwthen
+redef class TKwloop
redef fun parser_index: Int
do
return 26
end
end
-redef class TKwelse
+redef class TKwfor
redef fun parser_index: Int
do
return 27
end
end
-redef class TKwwhile
+redef class TKwin
redef fun parser_index: Int
do
return 28
end
end
-redef class TKwloop
+redef class TKwand
redef fun parser_index: Int
do
return 29
end
end
-redef class TKwfor
+redef class TKwor
redef fun parser_index: Int
do
return 30
end
end
-redef class TKwin
+redef class TKwnot
redef fun parser_index: Int
do
return 31
end
end
-redef class TKwand
+redef class TKwimplies
redef fun parser_index: Int
do
return 32
end
end
-redef class TKwor
+redef class TKwreturn
redef fun parser_index: Int
do
return 33
end
end
-redef class TKwnot
+redef class TKwcontinue
redef fun parser_index: Int
do
return 34
end
end
-redef class TKwimplies
+redef class TKwbreak
redef fun parser_index: Int
do
return 35
end
end
-redef class TKwreturn
+redef class TKwabort
redef fun parser_index: Int
do
return 36
end
end
-redef class TKwcontinue
+redef class TKwassert
redef fun parser_index: Int
do
return 37
end
end
-redef class TKwbreak
+redef class TKwnew
redef fun parser_index: Int
do
return 38
end
end
-redef class TKwabort
+redef class TKwisa
redef fun parser_index: Int
do
return 39
end
end
-redef class TKwassert
+redef class TKwonce
redef fun parser_index: Int
do
return 40
end
end
-redef class TKwnew
+redef class TKwsuper
redef fun parser_index: Int
do
return 41
end
end
-redef class TKwisa
+redef class TKwself
redef fun parser_index: Int
do
return 42
end
end
-redef class TKwonce
+redef class TKwtrue
redef fun parser_index: Int
do
return 43
end
end
-redef class TKwsuper
+redef class TKwfalse
redef fun parser_index: Int
do
return 44
end
end
-redef class TKwself
+redef class TKwnull
redef fun parser_index: Int
do
return 45
end
end
-redef class TKwtrue
+redef class TKwas
redef fun parser_index: Int
do
return 46
end
end
-redef class TKwfalse
+redef class TKwnullable
redef fun parser_index: Int
do
return 47
end
end
-redef class TKwnull
+redef class TKwisset
redef fun parser_index: Int
do
return 48
end
end
-redef class TKwas
+redef class TKwlabel
redef fun parser_index: Int
do
return 49
end
end
-redef class TKwnullable
+redef class TKwdebug
redef fun parser_index: Int
do
return 50
end
end
-redef class TKwisset
+redef class TOpar
redef fun parser_index: Int
do
return 51
end
end
-redef class TKwlabel
+redef class TCpar
redef fun parser_index: Int
do
return 52
end
end
-redef class TKwdebug
+redef class TObra
redef fun parser_index: Int
do
return 53
end
end
-redef class TOpar
+redef class TCbra
redef fun parser_index: Int
do
return 54
end
end
-redef class TCpar
+redef class TComma
redef fun parser_index: Int
do
return 55
end
end
-redef class TObra
+redef class TColumn
redef fun parser_index: Int
do
return 56
end
end
-redef class TCbra
+redef class TQuad
redef fun parser_index: Int
do
return 57
end
end
-redef class TComma
+redef class TAssign
redef fun parser_index: Int
do
return 58
end
end
-redef class TColumn
+redef class TPluseq
redef fun parser_index: Int
do
return 59
end
end
-redef class TQuad
+redef class TMinuseq
redef fun parser_index: Int
do
return 60
end
end
-redef class TAssign
+redef class TDotdotdot
redef fun parser_index: Int
do
return 61
end
end
-redef class TPluseq
+redef class TDotdot
redef fun parser_index: Int
do
return 62
end
end
-redef class TMinuseq
+redef class TDot
redef fun parser_index: Int
do
return 63
end
end
-redef class TDotdotdot
+redef class TPlus
redef fun parser_index: Int
do
return 64
end
end
-redef class TDotdot
+redef class TMinus
redef fun parser_index: Int
do
return 65
end
end
-redef class TDot
+redef class TStar
redef fun parser_index: Int
do
return 66
end
end
-redef class TPlus
+redef class TStarstar
redef fun parser_index: Int
do
return 67
end
end
-redef class TMinus
+redef class TSlash
redef fun parser_index: Int
do
return 68
end
end
-redef class TStar
+redef class TPercent
redef fun parser_index: Int
do
return 69
end
end
-redef class TSlash
+redef class TEq
redef fun parser_index: Int
do
return 70
end
end
-redef class TPercent
+redef class TNe
redef fun parser_index: Int
do
return 71
end
end
-redef class TEq
+redef class TLt
redef fun parser_index: Int
do
return 72
end
end
-redef class TNe
+redef class TLe
redef fun parser_index: Int
do
return 73
end
end
-redef class TLt
+redef class TLl
redef fun parser_index: Int
do
return 74
end
end
-redef class TLe
+redef class TGt
redef fun parser_index: Int
do
return 75
end
end
-redef class TLl
+redef class TGe
redef fun parser_index: Int
do
return 76
end
end
-redef class TGt
+redef class TGg
redef fun parser_index: Int
do
return 77
end
end
-redef class TGe
+redef class TStarship
redef fun parser_index: Int
do
return 78
end
end
-redef class TGg
+redef class TBang
redef fun parser_index: Int
do
return 79
end
end
-redef class TStarship
+redef class TAt
redef fun parser_index: Int
do
return 80
end
end
-redef class TBang
+redef class TClassid
redef fun parser_index: Int
do
return 81
end
end
-redef class TAt
+redef class TId
redef fun parser_index: Int
do
return 82
end
end
-redef class TClassid
+redef class TAttrid
redef fun parser_index: Int
do
return 83
end
end
-redef class TId
+redef class TNumber
redef fun parser_index: Int
do
return 84
end
end
-redef class TAttrid
+redef class THexNumber
redef fun parser_index: Int
do
return 85
end
end
-redef class TNumber
+redef class TFloat
redef fun parser_index: Int
do
return 86
end
end
-redef class THexNumber
+redef class TString
redef fun parser_index: Int
do
return 87
end
end
-redef class TFloat
+redef class TStartString
redef fun parser_index: Int
do
return 88
end
end
-redef class TString
+redef class TMidString
redef fun parser_index: Int
do
return 89
end
end
-redef class TStartString
+redef class TEndString
redef fun parser_index: Int
do
return 90
end
end
-redef class TMidString
+redef class TChar
redef fun parser_index: Int
do
return 91
end
end
-redef class TEndString
+redef class TBadString
redef fun parser_index: Int
do
return 92
end
end
-redef class TChar
+redef class TBadChar
redef fun parser_index: Int
do
return 93
end
end
-redef class TBadString
+redef class TExternCodeSegment
redef fun parser_index: Int
do
return 94
end
end
-redef class TBadChar
- redef fun parser_index: Int
- do
- return 95
- end
-
- init init_tk(loc: Location)
- do
- _location = loc
- end
-end
-redef class TExternCodeSegment
+redef class EOF
redef fun parser_index: Int
do
- return 96
- end
-
- init init_tk(loc: Location)
- do
- _location = loc
+ return 95
end
end
return new TKwdo.init_tk(location)
end
if accept_token == 17 then
- return new TKwreadable.init_tk(location)
+ return new TKwvar.init_tk(location)
end
if accept_token == 18 then
- return new TKwwritable.init_tk(location)
+ return new TKwextern.init_tk(location)
end
if accept_token == 19 then
- return new TKwvar.init_tk(location)
+ return new TKwpublic.init_tk(location)
end
if accept_token == 20 then
- return new TKwintern.init_tk(location)
+ return new TKwprotected.init_tk(location)
end
if accept_token == 21 then
- return new TKwextern.init_tk(location)
+ return new TKwprivate.init_tk(location)
end
if accept_token == 22 then
- return new TKwpublic.init_tk(location)
+ return new TKwintrude.init_tk(location)
end
if accept_token == 23 then
- return new TKwprotected.init_tk(location)
+ return new TKwif.init_tk(location)
end
if accept_token == 24 then
- return new TKwprivate.init_tk(location)
+ return new TKwthen.init_tk(location)
end
if accept_token == 25 then
- return new TKwintrude.init_tk(location)
+ return new TKwelse.init_tk(location)
end
if accept_token == 26 then
- return new TKwif.init_tk(location)
+ return new TKwwhile.init_tk(location)
end
if accept_token == 27 then
- return new TKwthen.init_tk(location)
+ return new TKwloop.init_tk(location)
end
if accept_token == 28 then
- return new TKwelse.init_tk(location)
+ return new TKwfor.init_tk(location)
end
if accept_token == 29 then
- return new TKwwhile.init_tk(location)
+ return new TKwin.init_tk(location)
end
if accept_token == 30 then
- return new TKwloop.init_tk(location)
+ return new TKwand.init_tk(location)
end
if accept_token == 31 then
- return new TKwfor.init_tk(location)
+ return new TKwor.init_tk(location)
end
if accept_token == 32 then
- return new TKwin.init_tk(location)
+ return new TKwnot.init_tk(location)
end
if accept_token == 33 then
- return new TKwand.init_tk(location)
+ return new TKwimplies.init_tk(location)
end
if accept_token == 34 then
- return new TKwor.init_tk(location)
+ return new TKwreturn.init_tk(location)
end
if accept_token == 35 then
- return new TKwnot.init_tk(location)
+ return new TKwcontinue.init_tk(location)
end
if accept_token == 36 then
- return new TKwimplies.init_tk(location)
+ return new TKwbreak.init_tk(location)
end
if accept_token == 37 then
- return new TKwreturn.init_tk(location)
+ return new TKwabort.init_tk(location)
end
if accept_token == 38 then
- return new TKwcontinue.init_tk(location)
+ return new TKwassert.init_tk(location)
end
if accept_token == 39 then
- return new TKwbreak.init_tk(location)
+ return new TKwnew.init_tk(location)
end
if accept_token == 40 then
- return new TKwabort.init_tk(location)
+ return new TKwisa.init_tk(location)
end
if accept_token == 41 then
- return new TKwassert.init_tk(location)
+ return new TKwonce.init_tk(location)
end
if accept_token == 42 then
- return new TKwnew.init_tk(location)
+ return new TKwsuper.init_tk(location)
end
if accept_token == 43 then
- return new TKwisa.init_tk(location)
+ return new TKwself.init_tk(location)
end
if accept_token == 44 then
- return new TKwonce.init_tk(location)
+ return new TKwtrue.init_tk(location)
end
if accept_token == 45 then
- return new TKwsuper.init_tk(location)
+ return new TKwfalse.init_tk(location)
end
if accept_token == 46 then
- return new TKwself.init_tk(location)
+ return new TKwnull.init_tk(location)
end
if accept_token == 47 then
- return new TKwtrue.init_tk(location)
+ return new TKwas.init_tk(location)
end
if accept_token == 48 then
- return new TKwfalse.init_tk(location)
+ return new TKwnullable.init_tk(location)
end
if accept_token == 49 then
- return new TKwnull.init_tk(location)
+ return new TKwisset.init_tk(location)
end
if accept_token == 50 then
- return new TKwas.init_tk(location)
+ return new TKwlabel.init_tk(location)
end
if accept_token == 51 then
- return new TKwnullable.init_tk(location)
+ return new TKwdebug.init_tk(location)
end
if accept_token == 52 then
- return new TKwisset.init_tk(location)
+ return new TOpar.init_tk(location)
end
if accept_token == 53 then
- return new TKwlabel.init_tk(location)
+ return new TCpar.init_tk(location)
end
if accept_token == 54 then
- return new TKwdebug.init_tk(location)
+ return new TObra.init_tk(location)
end
if accept_token == 55 then
- return new TOpar.init_tk(location)
+ return new TCbra.init_tk(location)
end
if accept_token == 56 then
- return new TCpar.init_tk(location)
+ return new TComma.init_tk(location)
end
if accept_token == 57 then
- return new TObra.init_tk(location)
+ return new TColumn.init_tk(location)
end
if accept_token == 58 then
- return new TCbra.init_tk(location)
+ return new TQuad.init_tk(location)
end
if accept_token == 59 then
- return new TComma.init_tk(location)
+ return new TAssign.init_tk(location)
end
if accept_token == 60 then
- return new TColumn.init_tk(location)
+ return new TPluseq.init_tk(location)
end
if accept_token == 61 then
- return new TQuad.init_tk(location)
+ return new TMinuseq.init_tk(location)
end
if accept_token == 62 then
- return new TAssign.init_tk(location)
+ return new TDotdotdot.init_tk(location)
end
if accept_token == 63 then
- return new TPluseq.init_tk(location)
+ return new TDotdot.init_tk(location)
end
if accept_token == 64 then
- return new TMinuseq.init_tk(location)
+ return new TDot.init_tk(location)
end
if accept_token == 65 then
- return new TDotdotdot.init_tk(location)
+ return new TPlus.init_tk(location)
end
if accept_token == 66 then
- return new TDotdot.init_tk(location)
+ return new TMinus.init_tk(location)
end
if accept_token == 67 then
- return new TDot.init_tk(location)
+ return new TStar.init_tk(location)
end
if accept_token == 68 then
- return new TPlus.init_tk(location)
+ return new TStarstar.init_tk(location)
end
if accept_token == 69 then
- return new TMinus.init_tk(location)
- end
- if accept_token == 70 then
- return new TStar.init_tk(location)
- end
- if accept_token == 71 then
return new TSlash.init_tk(location)
end
- if accept_token == 72 then
+ if accept_token == 70 then
return new TPercent.init_tk(location)
end
- if accept_token == 73 then
+ if accept_token == 71 then
return new TEq.init_tk(location)
end
- if accept_token == 74 then
+ if accept_token == 72 then
return new TNe.init_tk(location)
end
- if accept_token == 75 then
+ if accept_token == 73 then
return new TLt.init_tk(location)
end
- if accept_token == 76 then
+ if accept_token == 74 then
return new TLe.init_tk(location)
end
- if accept_token == 77 then
+ if accept_token == 75 then
return new TLl.init_tk(location)
end
- if accept_token == 78 then
+ if accept_token == 76 then
return new TGt.init_tk(location)
end
- if accept_token == 79 then
+ if accept_token == 77 then
return new TGe.init_tk(location)
end
- if accept_token == 80 then
+ if accept_token == 78 then
return new TGg.init_tk(location)
end
- if accept_token == 81 then
+ if accept_token == 79 then
return new TStarship.init_tk(location)
end
- if accept_token == 82 then
+ if accept_token == 80 then
return new TBang.init_tk(location)
end
- if accept_token == 83 then
+ if accept_token == 81 then
return new TAt.init_tk(location)
end
- if accept_token == 84 then
+ if accept_token == 82 then
return new TClassid.init_tk(location)
end
- if accept_token == 85 then
+ if accept_token == 83 then
return new TId.init_tk(location)
end
- if accept_token == 86 then
+ if accept_token == 84 then
return new TAttrid.init_tk(location)
end
- if accept_token == 87 then
+ if accept_token == 85 then
return new TNumber.init_tk(location)
end
- if accept_token == 88 then
+ if accept_token == 86 then
return new THexNumber.init_tk(location)
end
- if accept_token == 89 then
+ if accept_token == 87 then
return new TFloat.init_tk(location)
end
- if accept_token == 90 then
+ if accept_token == 88 then
return new TString.init_tk(location)
end
- if accept_token == 91 then
+ if accept_token == 89 then
return new TStartString.init_tk(location)
end
- if accept_token == 92 then
+ if accept_token == 90 then
return new TMidString.init_tk(location)
end
- if accept_token == 93 then
+ if accept_token == 91 then
return new TEndString.init_tk(location)
end
- if accept_token == 94 then
+ if accept_token == 92 then
return new TChar.init_tk(location)
end
- if accept_token == 95 then
+ if accept_token == 93 then
return new TBadString.init_tk(location)
end
- if accept_token == 96 then
+ if accept_token == 94 then
return new TBadChar.init_tk(location)
end
- if accept_token == 97 then
+ if accept_token == 95 then
return new TExternCodeSegment.init_tk(location)
end
abort # unknown token index `accept_token`
end
redef class EOF
- redef fun parser_index: Int
- do
- return 97
- end
-
init init_tk(loc: Location)
do
_cached_text = ""
kwredef = 'redef';
kwis = 'is';
kwdo = 'do';
-kwreadable = 'readable';
-kwwritable = 'writable';
kwvar = 'var';
-kwintern = 'intern';
kwextern = 'extern';
kwpublic = 'public';
kwprotected = 'protected';
plus = '+';
minus = '-';
star = '*';
+starstar = '**';
slash = '/';
percent = '%';
eq = '==';
= propdef~toplevel n1 {-> propdef~toplevel.propdef}
;
propdef~toplevel {-> propdef}
- = {meth} [doc]:no redef visibility kwmeth methid signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.concrete_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature, annotation_noend.annotations, stmtso.expr)}
- | {nobody} [doc]:no redef visibility kwmeth methid signature annotation_withend_nonull {-> New propdef.deferred_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature, annotation_withend_nonull.annotations)}
-!toplevel| {deferred} [doc]:no redef visibility kwmeth methid signature kwis kwabstract {-> New propdef.deferred_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature, Null)}
- | {intern} [doc]:no redef visibility kwmeth methid signature kwis kwintern {-> New propdef.intern_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature)}
-!toplevel| {intern_new} [doc]:no redef visibility kwnew methid? signature kwis kwintern {-> New propdef.intern_new(doc.doc, redef.kwredef, visibility, kwnew, methid, signature)}
- | {extern} [doc]:no redef visibility kwmeth methid signature kwis kwextern string_o extern_calls extern_code_block_o {-> New propdef.extern_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature, Null, string_o.string, extern_calls, extern_code_block_o.extern_code_block)}
- | {extern_implicit} [doc]:no redef visibility kwmeth methid signature annotation_noend? extern_calls extern_code_block {-> New propdef.extern_meth(doc.doc, redef.kwredef, visibility, kwmeth, methid, signature.signature, annotation_noend.annotations, Null, extern_calls, extern_code_block)}
-!toplevel| {var} [doc]:no readable? writable? redef visibility kwvar attrid typing_o {-> New propdef.attr(doc.doc, readable.able, writable.able, redef.kwredef, visibility, kwvar, attrid, Null, typing_o.type, Null, Null)}
-!toplevel| {var2} [doc]:no readable? writable? redef visibility kwvar attrid typing_o assign [n2]:no expr {-> New propdef.attr(doc.doc, readable.able, writable.able, redef.kwredef, visibility, kwvar, attrid, Null, typing_o.type, Null, expr)}
-!toplevel| {var3} [doc]:no redef visibility kwvar id typing_o writable? annotation_withend {-> New propdef.attr(doc.doc, Null, writable.able, redef.kwredef, visibility, kwvar, Null, id, typing_o.type, annotation_withend.annotations, Null)}
-!toplevel| {var4} [doc]:no redef visibility kwvar id typing_o writable? assign [n2]:no expr annotation_withend {-> New propdef.attr(doc.doc, Null, writable.able, redef.kwredef, visibility, kwvar, Null, id, typing_o.type, annotation_withend.annotations, expr.expr)}
-!toplevel| {init} [doc]:no redef visibility kwinit methid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.concrete_init(doc.doc, redef.kwredef, visibility, kwinit, methid, signature, annotation_noend.annotations, stmtso.expr)}
+ = {meth} [doc]:no redef visibility kwmeth methid signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, methid, signature, annotation_noend.annotations, Null, Null, stmtso.expr)}
+ | {nobody} [doc]:no redef visibility kwmeth methid signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, methid, signature.signature, annotation_withend_nonull.annotations, Null, Null, Null)}
+!toplevel| {intern_new} [doc]:no redef visibility kwnew methid? signature annotation_withend_nonull {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, methid, signature, annotation_withend_nonull.annotations, Null, Null, Null)}
+ | {extern_implicit} [doc]:no redef visibility kwmeth methid signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, kwmeth, Null, Null, methid, signature.signature, annotation_noend.annotations, extern_calls, extern_code_block, Null)}
+!toplevel| {var3} [doc]:no redef visibility kwvar id typing_o annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, Null, annotation_withend.annotations)}
+!toplevel| {var4} [doc]:no redef visibility kwvar id typing_o assign [n2]:no expr annotation_withend {-> New propdef.attr(doc.doc, redef.kwredef, visibility, kwvar, id, typing_o.type, expr.expr, annotation_withend.annotations)}
+!toplevel| {init} [doc]:no redef visibility kwinit methid? signature annotation_noend? kwdo stmtso kwend_o {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, kwinit, Null, methid, signature, annotation_noend.annotations, Null, Null, stmtso.expr)}
!toplevel| {type} [doc]:no redef visibility kwtype classid typing annotation_withend {-> New propdef.type(doc.doc, redef.kwredef, visibility, kwtype, classid, typing.type, annotation_withend.annotations)}
-!toplevel| {extern_init} [doc]:no redef visibility kwnew methid? signature kwis kwextern string_o extern_calls extern_code_block_o {-> New propdef.extern_init(doc.doc, redef.kwredef, visibility, kwnew, methid, signature, Null, string_o.string, extern_calls, extern_code_block_o.extern_code_block)}
-!toplevel| {extern_init_implicit} [doc]:no redef visibility kwnew methid? signature annotation_noend? extern_calls extern_code_block {-> New propdef.extern_init(doc.doc, redef.kwredef, visibility, kwnew, methid, signature, annotation_noend.annotations, Null, extern_calls, extern_code_block)}
+!toplevel| {extern_init_implicit} [doc]:no redef visibility kwnew methid? signature annotation_noend? extern_calls extern_code_block {-> New propdef.meth(doc.doc, redef.kwredef, visibility, Null, Null, kwnew, methid, signature, annotation_noend.annotations, extern_calls, extern_code_block, Null)}
;
annotation_withend~nonull {-> annotations?}
= {oneliner} kwis many_annotations {-> many_annotations.annotations}
= {oneliner} kwis many_annotations {-> many_annotations.annotations}
| {more} kwis n1 line_annotations {-> line_annotations.annotations}
;
-readable {-> able}
- = redef visibility kwreadable {-> New able.read(redef.kwredef, kwreadable)}
- ;
-writable {-> able}
- = redef visibility kwwritable {-> New able.write(redef.kwredef, visibility, kwwritable)}
- ;
visibility
= {public} {-> New visibility.public(Null)}
| {plus} plus {-> New methid.plus(plus)}
| {minus} minus {-> New methid.minus(minus)}
| {star} star {-> New methid.star(star)}
+ | {starstar} starstar {-> New methid.starstar(starstar)}
| {slash} slash {-> New methid.slash(slash)}
| {percent} percent {-> New methid.percent(percent)}
| {eq} eq {-> New methid.eq(eq)}
;
expr_mul~nopar~nobra {-> expr}
+ = expr_pow~nopar~nobra {-> expr_pow~nopar~nobra.expr}
+ | {:star} expr_mul~nopar~nobra :star :no [expr2]:expr_pow~nopar~nobra
+ | {:slash} expr_mul~nopar~nobra :slash :no [expr2]:expr_pow~nopar~nobra
+ | {:percent} expr_mul~nopar~nobra :percent :no [expr2]:expr_pow~nopar~nobra
+ ;
+
+expr_pow~nopar~nobra {-> expr}
= expr_minus~nopar~nobra {-> expr_minus~nopar~nobra.expr}
- | {:star} expr_mul~nopar~nobra :star :no [expr2]:expr_minus~nopar~nobra
- | {:slash} expr_mul~nopar~nobra :slash :no [expr2]:expr_minus~nopar~nobra
- | {:percent} expr_mul~nopar~nobra :percent :no [expr2]:expr_minus~nopar~nobra
+ | {:starstar} expr_minus~nopar~nobra :starstar :no [expr2]:expr_pow~nopar~nobra
;
expr_minus~nopar~nobra {-> expr}
;
expr_atom~nopar~nobra {-> expr}
- = {attr} recv~nopar~nobra qualified_o attrid {-> New expr.attr(recv~nopar~nobra.expr, attrid)}
+ = expr_single~nopar~nobra {-> expr_single~nopar~nobra.expr}
+ | {attr} recv~nopar~nobra qualified_o attrid {-> New expr.attr(recv~nopar~nobra.expr, attrid)}
| {call} recv~nopar~nobra qid args {-> New expr.call(recv~nopar~nobra.expr, qid.id, args.exprs)}
| {super} qualified_o kwsuper args {-> New expr.super(qualified_o.qualified, kwsuper, args.exprs)}
| {init} recv~nopar~nobra kwinit args {-> New expr.init(recv~nopar~nobra.expr, kwinit, args.exprs)}
!nobra | {bra} expr_atom~nopar braargs {-> New expr.bra(expr_atom~nopar.expr, braargs.exprs)}
| {new} kwnew no type~nobra_nopar dot [n2]:no qid args {-> New expr.new(kwnew, type~nobra_nopar.type, qid.id, args.exprs)}
-// !nopar to unambiguise 'foo[5].bar' between '(foo[5]).bar' and 'foo([5].bar),
-!nobra!nopar | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
-!nobra!nopar | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra annotations_o {-> New expr.orange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
-!nobra!nopar | {array} braargs annotations_o {-> New expr.array(braargs.exprs, annotations_o.annotations)}
- | {self} kwself annotations_o {-> New expr.self(kwself, annotations_o.annotations)}
+ | {as_cast} expr_atom~nopar~nobra dot no kwas [n2]:no opar [n3]:no type [n4]:no cpar {-> New expr.as_cast(expr_atom~nopar~nobra.expr, kwas, opar, type, cpar)}
+ | {as_notnull} expr_atom~nopar~nobra dot no kwas [n2]:no opar [n3]:no kwnot [n4]:no kwnull [n5]:no cpar {-> New expr.as_notnull(expr_atom~nopar~nobra.expr, kwas, opar, kwnot, kwnull, cpar)}
+ | {as_notnull2}expr_atom~nopar~nobra dot no kwas [n2]:no kwnot [n4]:no kwnull {-> New expr.as_notnull(expr_atom~nopar~nobra.expr, kwas, Null, kwnot, kwnull, Null)}
+ | {vararg} [expr]:expr_atom~nopar~nobra dotdotdot {-> New expr.vararg(expr.expr, dotdotdot)}
+ ;
+
+expr_single~nopar~nobra {-> expr}
+ = {self} kwself annotations_o {-> New expr.self(kwself, annotations_o.annotations)}
| {true} kwtrue annotations_o {-> New expr.true(kwtrue, annotations_o.annotations)}
| {false} kwfalse annotations_o {-> New expr.false(kwfalse, annotations_o.annotations)}
| {null} kwnull annotations_o {-> New expr.null(kwnull, annotations_o.annotations)}
| {string} string annotations_o {-> New expr.string(string, annotations_o.annotations)}
| {superstring} superstring {-> superstring.expr}
!nopar | {par} opar no expr [n2]:no cpar annotations_o {-> New expr.par(opar, expr, cpar, annotations_o.annotations)}
- | {as_cast} expr_atom~nopar~nobra dot no kwas [n2]:no opar [n3]:no type [n4]:no cpar {-> New expr.as_cast(expr_atom~nopar~nobra.expr, kwas, opar, type, cpar)}
- | {as_notnull} expr_atom~nopar~nobra dot no kwas [n2]:no opar [n3]:no kwnot [n4]:no kwnull [n5]:no cpar {-> New expr.as_notnull(expr_atom~nopar~nobra.expr, kwas, opar, kwnot, kwnull, cpar)}
- | {as_notnull2}expr_atom~nopar~nobra dot no kwas [n2]:no kwnot [n4]:no kwnull {-> New expr.as_notnull(expr_atom~nopar~nobra.expr, kwas, Null, kwnot, kwnull, Null)}
- | {vararg} [expr]:expr_atom~nopar~nobra dotdotdot {-> New expr.vararg(expr.expr, dotdotdot)}
+// !nopar to unambiguise 'foo[5].bar' between '(foo[5]).bar' and 'foo([5].bar),
+!nobra!nopar | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra annotations_o {-> New expr.crange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
+!nobra!nopar | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra annotations_o {-> New expr.orange(obra, expr, expr2.expr, cbra, annotations_o.annotations)}
+!nobra!nopar | {array} braargs annotations_o {-> New expr.array(braargs.exprs, annotations_o.annotations)}
;
superstring {-> expr}
;
annotation_list {-> annotation*}
- = {many} one_annotation annotations_tail* {-> [one_annotation.annotation, annotations_tail.annotation] }
+ = {many} one_annotation_list annotations_tail* {-> [one_annotation_list.annotation, annotations_tail.annotation] }
+ ;
+
+one_annotation_list~nopar {-> annotation}
+ = {alone} redef visibility atid annotations_o~nopar {-> New annotation(Null, redef.kwredef, visibility, atid, Null, [], Null, annotations_o~nopar.annotations)}
+// !nopar to unambiguise 'new T@foo(bar)' between 'new T@(foo(bar))' and 'new (T@foo)(bar)'
+!nopar | {args} redef visibility atid opar no at_args [n2]:no cpar annotations_o~nopar {-> New annotation(Null, redef.kwredef, visibility, atid, opar, [at_args.at_arg], cpar, annotations_o~nopar.annotations)}
+!nopar | {nopar} redef visibility atid at_arg_single {-> New annotation(Null, redef.kwredef, visibility, atid, Null, [at_arg_single.at_arg], Null, Null)}
+ ;
+at_arg_single {-> at_arg}
+// FIXME: why expr_single but not expr_atom is not clear :(
+ = {expr} [expr]:expr_single_nopar {-> New at_arg.expr(expr.expr)}
+ ;
+
+annotations_tail {-> annotation}
+ = comma no one_annotation_list {-> one_annotation_list.annotation}
;
line_annotations {-> annotations}
| {nopar} [doc]:no atid_forclass at_args_nopar n1 {-> New annotation(doc.doc, Null, Null, atid_forclass.atid, Null, [at_args_nopar.at_arg], Null, Null)}
;
-annotations_tail {-> annotation}
- = comma no one_annotation {-> one_annotation.annotation}
- ;
-
at_args~nopar {-> at_arg* }
= {many} at_arg~nopar at_args_tail* {-> [at_arg~nopar.at_arg, at_args_tail.at_arg]}
;
atid~forclass {-> atid}
= {id} id {-> New atid.id(id)}
-//!forclass | {kwextern} kwextern {-> New atid.kwextern(kwextern)}
-//!forclass | {kwintern} kwintern {-> New atid.kwintern(kwintern)}
-!forclass | {kwreadable} kwreadable {-> New atid.kwreadable(kwreadable)}
-!forclass | {kwwritable} kwwritable {-> New atid.kwwritable(kwwritable)}
+!forclass | {kwextern} kwextern {-> New atid.kwextern(kwextern)}
// | {kwimport} kwimport {-> New atid.kwimport(kwimport)}
+ | {kwabstract} kwabstract {-> New atid.kwabstract(kwabstract)}
;
/* MISC **********************************************************************/
superclass = kwsuper type annotations?;
-propdef = {attr} doc? [readable]:able? [writable]:able? kwredef? visibility kwvar [id]:attrid? [id2]:id? type? annotations? expr?
- | {meth} doc? kwredef? visibility methid signature
- | {deferred_meth} doc? kwredef? visibility kwmeth methid signature annotations?
- | {intern_meth} doc? kwredef? visibility kwmeth methid signature
- | {intern_new} doc? kwredef? visibility kwnew methid? signature
- | {extern_meth} doc? kwredef? visibility kwmeth methid signature annotations? [extern]:string? extern_calls? extern_code_block?
- | {concrete_meth} doc? kwredef? visibility kwmeth methid signature annotations? [block]:expr?
- | {concrete_init} doc? kwredef? visibility kwinit methid? signature annotations? [block]:expr?
- //| {concrete_new} doc? kwredef? visibility kwnew methid? signature [block]:expr?
- | {extern_init} doc? kwredef? visibility kwnew methid? signature annotations? [extern]:string? extern_calls? extern_code_block?
+propdef = {attr} doc? kwredef? visibility kwvar [id2]:id type? expr? annotations?
| {main_meth} kwredef? [block]:expr?
| {type} doc? kwredef? visibility kwtype [id]:classid type annotations?
+ | {meth} doc? kwredef? visibility kwmeth? kwinit? kwnew? methid? signature annotations? extern_calls? extern_code_block? [block]:expr?
;
-able = {read} kwredef? kwreadable
- | {write} kwredef? visibility? kwwritable
- ;
-
-methid = {id} id | {plus} plus | {minus} minus | {star} star | {slash} slash | {percent} percent | {eq} eq | {ne} ne | {le} le | {ge} ge | {lt} lt | {gt} gt | {ll} ll | {gg} gg | {bra} obra cbra | {starship} starship | {assign} id assign | {braassign} obra cbra assign;
+methid = {id} id | {plus} plus | {minus} minus | {star} star | {starstar} starstar | {slash} slash | {percent} percent | {eq} eq | {ne} ne | {le} le | {ge} ge | {lt} lt | {gt} gt | {ll} ll | {gg} gg | {bra} obra cbra | {starship} starship | {assign} id assign | {braassign} obra cbra assign;
signature = opar? [params]:param* cpar? type?;
| {minus} expr [expr2]:expr
| {starship} expr [expr2]:expr
| {star} expr [expr2]:expr
+ | {starstar} expr [expr2]:expr
| {slash} expr [expr2]:expr
| {percent} expr [expr2]:expr
| {uminus} minus expr
| {expr} expr
| {at} annotations
;
-atid = {id} id | {kwextern} [id]:kwextern | {kwintern} [id]:kwintern | {kwreadable} [id]:kwreadable | {kwwritable} [id]:kwwritable | {kwimport} [id]:kwimport;
+atid = {id} id | {kwextern} [id]:kwextern | {kwabstract} [id]:kwabstract | {kwimport} [id]:kwimport;
/*****************************************************************************/
new ReduceAction72(14),
new ReduceAction73(14),
new ReduceAction74(14),
- new ReduceAction75(14),
- new ReduceAction76(14),
- new ReduceAction77(14),
- new ReduceAction78(14),
- new ReduceAction79(14),
- new ReduceAction80(14),
- new ReduceAction81(14),
- new ReduceAction82(14),
- new ReduceAction83(14),
- new ReduceAction84(14),
- new ReduceAction85(14),
- new ReduceAction86(14),
- new ReduceAction87(14),
- new ReduceAction88(14),
- new ReduceAction89(14),
- new ReduceAction90(15),
- new ReduceAction91(15),
+ new ReduceAction75(15),
+ new ReduceAction76(15),
new ReduceAction22(15),
- new ReduceAction90(16),
- new ReduceAction94(16),
- new ReduceAction95(17),
+ new ReduceAction75(16),
+ new ReduceAction79(16),
+ new ReduceAction80(17),
+ new ReduceAction81(17),
+ new ReduceAction82(17),
+ new ReduceAction83(17),
+ new ReduceAction84(17),
+ new ReduceAction85(18),
+ new ReduceAction86(18),
+ new ReduceAction87(18),
+ new ReduceAction88(18),
+ new ReduceAction89(18),
+ new ReduceAction90(18),
+ new ReduceAction91(18),
+ new ReduceAction92(18),
+ new ReduceAction93(18),
+ new ReduceAction94(18),
+ new ReduceAction95(18),
new ReduceAction96(18),
- new ReduceAction97(19),
- new ReduceAction98(19),
- new ReduceAction99(19),
- new ReduceAction100(19),
- new ReduceAction101(19),
- new ReduceAction102(20),
- new ReduceAction103(20),
- new ReduceAction104(20),
- new ReduceAction105(20),
- new ReduceAction106(20),
- new ReduceAction107(20),
+ new ReduceAction97(18),
+ new ReduceAction98(18),
+ new ReduceAction99(18),
+ new ReduceAction100(18),
+ new ReduceAction101(18),
+ new ReduceAction102(18),
+ new ReduceAction103(18),
+ new ReduceAction104(19),
+ new ReduceAction105(19),
+ new ReduceAction106(19),
+ new ReduceAction107(19),
new ReduceAction108(20),
new ReduceAction109(20),
- new ReduceAction110(20),
- new ReduceAction111(20),
- new ReduceAction112(20),
- new ReduceAction113(20),
- new ReduceAction114(20),
- new ReduceAction115(20),
- new ReduceAction116(20),
- new ReduceAction117(20),
- new ReduceAction118(20),
- new ReduceAction119(20),
- new ReduceAction120(21),
- new ReduceAction121(21),
- new ReduceAction122(21),
- new ReduceAction123(21),
- new ReduceAction124(22),
- new ReduceAction125(22),
- new ReduceAction51(22),
- new ReduceAction127(23),
- new ReduceAction128(24),
- new ReduceAction129(24),
- new ReduceAction130(24),
- new ReduceAction131(24),
- new ReduceAction132(24),
- new ReduceAction133(25),
- new ReduceAction134(25),
- new ReduceAction22(25),
- new ReduceAction136(26),
- new ReduceAction137(27),
- new ReduceAction137(27),
- new ReduceAction139(27),
- new ReduceAction140(28),
- new ReduceAction141(28),
- new ReduceAction142(28),
- new ReduceAction143(29),
- new ReduceAction144(29),
- new ReduceAction145(29),
- new ReduceAction146(29),
- new ReduceAction147(29),
- new ReduceAction148(29),
- new ReduceAction22(30),
- new ReduceAction150(30),
- new ReduceAction151(31),
- new ReduceAction152(32),
- new ReduceAction153(32),
- new ReduceAction154(33),
- new ReduceAction22(33),
- new ReduceAction156(34),
- new ReduceAction157(35),
- new ReduceAction158(35),
- new ReduceAction159(35),
- new ReduceAction160(35),
- new ReduceAction161(36),
- new ReduceAction162(36),
- new ReduceAction163(37),
- new ReduceAction163(38),
- new ReduceAction163(39),
- new ReduceAction22(39),
- new ReduceAction167(40),
- new ReduceAction168(40),
- new ReduceAction169(40),
- new ReduceAction170(40),
- new ReduceAction171(41),
- new ReduceAction172(41),
- new ReduceAction173(42),
- new ReduceAction174(42),
- new ReduceAction175(43),
- new ReduceAction176(43),
- new ReduceAction167(44),
- new ReduceAction170(45),
- new ReduceAction170(45),
- new ReduceAction180(45),
- new ReduceAction181(45),
- new ReduceAction182(45),
- new ReduceAction183(45),
- new ReduceAction184(45),
- new ReduceAction185(45),
- new ReduceAction186(45),
- new ReduceAction170(45),
- new ReduceAction170(45),
- new ReduceAction170(45),
- new ReduceAction170(45),
- new ReduceAction170(45),
- new ReduceAction170(45),
+ new ReduceAction51(20),
+ new ReduceAction111(21),
+ new ReduceAction112(22),
+ new ReduceAction113(22),
+ new ReduceAction114(22),
+ new ReduceAction115(22),
+ new ReduceAction116(22),
+ new ReduceAction117(23),
+ new ReduceAction118(23),
+ new ReduceAction22(23),
+ new ReduceAction120(24),
+ new ReduceAction121(25),
+ new ReduceAction121(25),
+ new ReduceAction123(25),
+ new ReduceAction124(26),
+ new ReduceAction125(26),
+ new ReduceAction126(26),
+ new ReduceAction127(27),
+ new ReduceAction128(27),
+ new ReduceAction129(27),
+ new ReduceAction130(27),
+ new ReduceAction131(27),
+ new ReduceAction132(27),
+ new ReduceAction22(28),
+ new ReduceAction134(28),
+ new ReduceAction135(29),
+ new ReduceAction136(30),
+ new ReduceAction137(30),
+ new ReduceAction138(31),
+ new ReduceAction22(31),
+ new ReduceAction140(32),
+ new ReduceAction141(33),
+ new ReduceAction142(33),
+ new ReduceAction143(33),
+ new ReduceAction144(33),
+ new ReduceAction145(34),
+ new ReduceAction146(34),
+ new ReduceAction147(35),
+ new ReduceAction147(36),
+ new ReduceAction147(37),
+ new ReduceAction22(37),
+ new ReduceAction151(38),
+ new ReduceAction152(38),
+ new ReduceAction153(38),
+ new ReduceAction154(38),
+ new ReduceAction155(39),
+ new ReduceAction156(39),
+ new ReduceAction157(40),
+ new ReduceAction158(40),
+ new ReduceAction159(41),
+ new ReduceAction160(41),
+ new ReduceAction151(42),
+ new ReduceAction154(43),
+ new ReduceAction154(43),
+ new ReduceAction164(43),
+ new ReduceAction165(43),
+ new ReduceAction166(43),
+ new ReduceAction167(43),
+ new ReduceAction168(43),
+ new ReduceAction169(43),
+ new ReduceAction170(43),
+ new ReduceAction154(43),
+ new ReduceAction154(43),
+ new ReduceAction154(43),
+ new ReduceAction154(43),
+ new ReduceAction154(43),
+ new ReduceAction154(43),
+ new ReduceAction177(43),
+ new ReduceAction178(43),
+ new ReduceAction179(43),
+ new ReduceAction180(43),
+ new ReduceAction181(43),
+ new ReduceAction182(43),
+ new ReduceAction183(43),
+ new ReduceAction182(43),
+ new ReduceAction185(43),
+ new ReduceAction186(43),
+ new ReduceAction185(43),
+ new ReduceAction188(43),
+ new ReduceAction189(44),
+ new ReduceAction190(44),
+ new ReduceAction191(45),
+ new ReduceAction192(45),
new ReduceAction193(45),
new ReduceAction194(45),
- new ReduceAction195(45),
- new ReduceAction196(45),
- new ReduceAction197(45),
- new ReduceAction198(45),
- new ReduceAction199(45),
- new ReduceAction198(45),
- new ReduceAction201(45),
- new ReduceAction202(45),
- new ReduceAction201(45),
- new ReduceAction204(45),
- new ReduceAction205(46),
- new ReduceAction206(46),
- new ReduceAction207(47),
- new ReduceAction208(47),
- new ReduceAction209(47),
- new ReduceAction210(47),
- new ReduceAction211(48),
- new ReduceAction212(48),
- new ReduceAction213(48),
- new ReduceAction214(48),
- new ReduceAction215(48),
- new ReduceAction216(48),
- new ReduceAction217(48),
- new ReduceAction218(48),
- new ReduceAction219(48),
- new ReduceAction220(48),
- new ReduceAction221(49),
- new ReduceAction222(49),
- new ReduceAction223(50),
- new ReduceAction224(50),
- new ReduceAction225(51),
- new ReduceAction226(51),
- new ReduceAction227(51),
- new ReduceAction228(51),
- new ReduceAction229(51),
- new ReduceAction167(52),
- new ReduceAction169(52),
- new ReduceAction232(53),
- new ReduceAction233(53),
- new ReduceAction234(54),
- new ReduceAction235(54),
- new ReduceAction236(55),
- new ReduceAction237(55),
- new ReduceAction238(55),
- new ReduceAction239(55),
- new ReduceAction240(56),
- new ReduceAction241(56),
- new ReduceAction242(56),
- new ReduceAction243(56),
- new ReduceAction244(57),
- new ReduceAction170(58),
- new ReduceAction170(59),
- new ReduceAction247(59),
- new ReduceAction170(60),
+ new ReduceAction195(46),
+ new ReduceAction196(46),
+ new ReduceAction197(46),
+ new ReduceAction198(46),
+ new ReduceAction199(46),
+ new ReduceAction200(46),
+ new ReduceAction201(46),
+ new ReduceAction202(46),
+ new ReduceAction203(46),
+ new ReduceAction204(46),
+ new ReduceAction205(47),
+ new ReduceAction206(47),
+ new ReduceAction207(48),
+ new ReduceAction208(48),
+ new ReduceAction209(49),
+ new ReduceAction210(49),
+ new ReduceAction211(49),
+ new ReduceAction212(49),
+ new ReduceAction213(49),
+ new ReduceAction151(50),
+ new ReduceAction153(50),
+ new ReduceAction216(51),
+ new ReduceAction217(51),
+ new ReduceAction218(52),
+ new ReduceAction219(52),
+ new ReduceAction220(53),
+ new ReduceAction221(53),
+ new ReduceAction222(53),
+ new ReduceAction223(53),
+ new ReduceAction224(54),
+ new ReduceAction225(54),
+ new ReduceAction226(54),
+ new ReduceAction227(54),
+ new ReduceAction228(55),
+ new ReduceAction154(56),
+ new ReduceAction154(57),
+ new ReduceAction231(57),
+ new ReduceAction154(58),
+ new ReduceAction233(58),
+ new ReduceAction234(58),
+ new ReduceAction235(58),
+ new ReduceAction236(58),
+ new ReduceAction154(59),
+ new ReduceAction238(59),
+ new ReduceAction154(60),
+ new ReduceAction240(60),
+ new ReduceAction241(60),
+ new ReduceAction242(60),
+ new ReduceAction243(60),
+ new ReduceAction244(60),
+ new ReduceAction245(60),
+ new ReduceAction246(60),
+ new ReduceAction247(60),
+ new ReduceAction248(60),
new ReduceAction249(60),
- new ReduceAction250(60),
- new ReduceAction251(60),
- new ReduceAction252(60),
- new ReduceAction170(61),
- new ReduceAction254(61),
- new ReduceAction170(62),
+ new ReduceAction154(61),
+ new ReduceAction251(61),
+ new ReduceAction252(61),
+ new ReduceAction154(62),
+ new ReduceAction254(62),
+ new ReduceAction255(62),
new ReduceAction256(62),
- new ReduceAction257(62),
- new ReduceAction258(62),
- new ReduceAction259(62),
- new ReduceAction260(62),
- new ReduceAction261(62),
- new ReduceAction262(62),
- new ReduceAction263(62),
- new ReduceAction264(62),
- new ReduceAction265(62),
- new ReduceAction170(63),
- new ReduceAction267(63),
- new ReduceAction268(63),
- new ReduceAction170(64),
- new ReduceAction270(64),
- new ReduceAction271(64),
- new ReduceAction272(64),
- new ReduceAction170(65),
- new ReduceAction274(65),
- new ReduceAction275(65),
- new ReduceAction170(66),
+ new ReduceAction154(63),
+ new ReduceAction258(63),
+ new ReduceAction154(64),
+ new ReduceAction260(64),
+ new ReduceAction261(64),
+ new ReduceAction154(65),
+ new ReduceAction263(65),
+ new ReduceAction264(65),
+ new ReduceAction265(65),
+ new ReduceAction154(66),
+ new ReduceAction267(66),
+ new ReduceAction268(66),
+ new ReduceAction177(66),
+ new ReduceAction178(66),
+ new ReduceAction179(66),
+ new ReduceAction180(66),
+ new ReduceAction181(66),
+ new ReduceAction274(66),
+ new ReduceAction275(66),
+ new ReduceAction276(66),
new ReduceAction277(66),
new ReduceAction278(66),
new ReduceAction279(66),
new ReduceAction280(67),
new ReduceAction281(67),
- new ReduceAction193(67),
- new ReduceAction194(67),
- new ReduceAction195(67),
- new ReduceAction196(67),
- new ReduceAction197(67),
+ new ReduceAction282(67),
+ new ReduceAction283(67),
+ new ReduceAction284(67),
+ new ReduceAction285(67),
+ new ReduceAction286(67),
new ReduceAction287(67),
new ReduceAction288(67),
- new ReduceAction289(67),
+ new ReduceAction154(67),
new ReduceAction290(67),
new ReduceAction291(67),
new ReduceAction292(67),
new ReduceAction293(67),
- new ReduceAction294(67),
- new ReduceAction295(67),
- new ReduceAction296(67),
- new ReduceAction297(67),
- new ReduceAction298(67),
- new ReduceAction299(67),
- new ReduceAction300(67),
- new ReduceAction170(67),
- new ReduceAction302(67),
- new ReduceAction303(67),
- new ReduceAction304(67),
- new ReduceAction305(67),
- new ReduceAction306(67),
- new ReduceAction307(68),
- new ReduceAction308(68),
- new ReduceAction309(69),
- new ReduceAction310(69),
- new ReduceAction311(70),
- new ReduceAction309(71),
- new ReduceAction310(71),
- new ReduceAction314(72),
- new ReduceAction315(73),
- new ReduceAction316(74),
- new ReduceAction317(74),
- new ReduceAction318(75),
+ new ReduceAction294(68),
+ new ReduceAction295(68),
+ new ReduceAction296(69),
+ new ReduceAction297(69),
+ new ReduceAction298(70),
+ new ReduceAction296(71),
+ new ReduceAction297(71),
+ new ReduceAction301(72),
+ new ReduceAction302(73),
+ new ReduceAction303(74),
+ new ReduceAction304(74),
+ new ReduceAction305(75),
new ReduceAction22(75),
- new ReduceAction320(76),
- new ReduceAction321(76),
- new ReduceAction322(77),
- new ReduceAction323(78),
- new ReduceAction324(78),
- new ReduceAction322(79),
- new ReduceAction326(80),
- new ReduceAction327(80),
- new ReduceAction328(80),
- new ReduceAction329(80),
- new ReduceAction330(80),
- new ReduceAction331(81),
- new ReduceAction332(81),
- new ReduceAction333(81),
- new ReduceAction334(81),
- new ReduceAction335(81),
- new ReduceAction336(82),
- new ReduceAction337(83),
- new ReduceAction338(83),
- new ReduceAction339(84),
- new ReduceAction340(85),
- new ReduceAction341(85),
- new ReduceAction341(85),
- new ReduceAction343(85),
- new ReduceAction344(86),
- new ReduceAction345(86),
- new ReduceAction346(86),
- new ReduceAction347(87),
- new ReduceAction348(87),
- new ReduceAction349(87),
- new ReduceAction347(88),
- new ReduceAction351(88),
- new ReduceAction348(88),
- new ReduceAction349(88),
- new ReduceAction354(89),
- new ReduceAction310(90),
- new ReduceAction356(90),
- new ReduceAction357(91),
- new ReduceAction358(92),
- new ReduceAction359(92),
- new ReduceAction360(93),
- new ReduceAction361(93),
- new ReduceAction362(93),
- new ReduceAction363(93),
- new ReduceAction364(94),
- new ReduceAction365(94),
- new ReduceAction366(94),
- new ReduceAction22(94),
- new ReduceAction368(95),
- new ReduceAction369(95),
- new ReduceAction370(95),
- new ReduceAction369(95),
- new ReduceAction372(96),
- new ReduceAction373(96),
- new ReduceAction374(96),
- new ReduceAction373(96),
- new ReduceAction376(97),
- new ReduceAction377(98),
- new ReduceAction22(99),
- new ReduceAction379(99),
- new ReduceAction380(100),
- new ReduceAction380(100),
- new ReduceAction382(101),
- new ReduceAction383(101),
- new ReduceAction23(101),
- new ReduceAction22(102),
- new ReduceAction386(102),
- new ReduceAction387(103),
- new ReduceAction388(103),
- new ReduceAction380(103),
- new ReduceAction56(104),
- new ReduceAction57(105),
- new ReduceAction58(105),
- new ReduceAction59(105),
- new ReduceAction61(105),
- new ReduceAction64(105),
- new ReduceAction65(105),
- new ReduceAction66(105),
- new ReduceAction90(106),
- new ReduceAction91(106),
- new ReduceAction157(107),
- new ReduceAction158(107),
- new ReduceAction170(108),
- new ReduceAction170(109),
- new ReduceAction247(109),
- new ReduceAction170(110),
- new ReduceAction249(110),
- new ReduceAction250(110),
- new ReduceAction251(110),
- new ReduceAction252(110),
- new ReduceAction170(111),
- new ReduceAction254(111),
- new ReduceAction170(112),
- new ReduceAction256(112),
- new ReduceAction257(112),
- new ReduceAction258(112),
- new ReduceAction259(112),
- new ReduceAction260(112),
- new ReduceAction261(112),
- new ReduceAction262(112),
- new ReduceAction263(112),
- new ReduceAction264(112),
- new ReduceAction265(112),
- new ReduceAction170(113),
- new ReduceAction267(113),
- new ReduceAction268(113),
- new ReduceAction170(114),
- new ReduceAction270(114),
- new ReduceAction271(114),
- new ReduceAction272(114),
- new ReduceAction170(115),
- new ReduceAction274(115),
- new ReduceAction275(115),
- new ReduceAction170(116),
- new ReduceAction277(116),
- new ReduceAction278(116),
- new ReduceAction279(116),
- new ReduceAction280(117),
- new ReduceAction281(117),
- new ReduceAction193(117),
- new ReduceAction194(117),
- new ReduceAction195(117),
- new ReduceAction196(117),
- new ReduceAction197(117),
- new ReduceAction288(117),
- new ReduceAction292(117),
- new ReduceAction293(117),
- new ReduceAction294(117),
- new ReduceAction295(117),
- new ReduceAction296(117),
- new ReduceAction297(117),
- new ReduceAction298(117),
- new ReduceAction299(117),
- new ReduceAction300(117),
- new ReduceAction170(117),
- new ReduceAction302(117),
- new ReduceAction303(117),
- new ReduceAction304(117),
- new ReduceAction305(117),
- new ReduceAction306(117),
- new ReduceAction157(118),
- new ReduceAction158(118),
- new ReduceAction159(118),
- new ReduceAction160(118),
- new ReduceAction170(119),
- new ReduceAction170(119),
- new ReduceAction180(119),
- new ReduceAction181(119),
- new ReduceAction182(119),
- new ReduceAction183(119),
- new ReduceAction184(119),
- new ReduceAction185(119),
- new ReduceAction186(119),
- new ReduceAction170(119),
- new ReduceAction170(119),
- new ReduceAction170(119),
- new ReduceAction170(119),
- new ReduceAction170(119),
- new ReduceAction170(119),
- new ReduceAction193(119),
- new ReduceAction194(119),
- new ReduceAction195(119),
- new ReduceAction196(119),
- new ReduceAction197(119),
- new ReduceAction198(119),
- new ReduceAction199(119),
- new ReduceAction198(119),
- new ReduceAction201(119),
- new ReduceAction202(119),
- new ReduceAction201(119),
- new ReduceAction204(119),
- new ReduceAction211(120),
- new ReduceAction212(120),
- new ReduceAction213(120),
- new ReduceAction214(120),
- new ReduceAction215(120),
- new ReduceAction216(120),
- new ReduceAction217(120),
- new ReduceAction218(120),
- new ReduceAction219(120),
- new ReduceAction220(120),
- new ReduceAction170(121),
- new ReduceAction170(122),
- new ReduceAction247(122),
+ new ReduceAction307(76),
+ new ReduceAction308(76),
+ new ReduceAction309(77),
+ new ReduceAction310(78),
+ new ReduceAction311(78),
+ new ReduceAction307(79),
+ new ReduceAction308(79),
+ new ReduceAction314(79),
+ new ReduceAction315(80),
+ new ReduceAction316(81),
+ new ReduceAction309(82),
+ new ReduceAction318(83),
+ new ReduceAction319(83),
+ new ReduceAction320(83),
+ new ReduceAction321(83),
+ new ReduceAction322(83),
+ new ReduceAction323(84),
+ new ReduceAction324(84),
+ new ReduceAction325(84),
+ new ReduceAction326(84),
+ new ReduceAction327(84),
+ new ReduceAction328(85),
+ new ReduceAction329(85),
+ new ReduceAction330(86),
+ new ReduceAction331(87),
+ new ReduceAction315(87),
+ new ReduceAction315(87),
+ new ReduceAction334(87),
+ new ReduceAction335(88),
+ new ReduceAction336(88),
+ new ReduceAction337(88),
+ new ReduceAction338(89),
+ new ReduceAction339(89),
+ new ReduceAction340(89),
+ new ReduceAction338(90),
+ new ReduceAction342(90),
+ new ReduceAction339(90),
+ new ReduceAction340(90),
+ new ReduceAction345(91),
+ new ReduceAction297(92),
+ new ReduceAction347(92),
+ new ReduceAction348(93),
+ new ReduceAction349(94),
+ new ReduceAction350(94),
+ new ReduceAction351(95),
+ new ReduceAction352(95),
+ new ReduceAction353(95),
+ new ReduceAction354(95),
+ new ReduceAction355(96),
+ new ReduceAction356(96),
+ new ReduceAction357(96),
+ new ReduceAction22(96),
+ new ReduceAction359(97),
+ new ReduceAction360(97),
+ new ReduceAction361(97),
+ new ReduceAction360(97),
+ new ReduceAction363(98),
+ new ReduceAction364(98),
+ new ReduceAction365(98),
+ new ReduceAction364(98),
+ new ReduceAction367(99),
+ new ReduceAction368(100),
+ new ReduceAction22(101),
+ new ReduceAction370(101),
+ new ReduceAction371(102),
+ new ReduceAction371(102),
+ new ReduceAction373(103),
+ new ReduceAction374(103),
+ new ReduceAction23(103),
+ new ReduceAction22(104),
+ new ReduceAction377(104),
+ new ReduceAction378(105),
+ new ReduceAction379(105),
+ new ReduceAction371(105),
+ new ReduceAction56(106),
+ new ReduceAction57(107),
+ new ReduceAction58(107),
+ new ReduceAction59(107),
+ new ReduceAction62(107),
+ new ReduceAction63(107),
+ new ReduceAction75(108),
+ new ReduceAction76(108),
+ new ReduceAction141(109),
+ new ReduceAction142(109),
+ new ReduceAction154(110),
+ new ReduceAction154(111),
+ new ReduceAction231(111),
+ new ReduceAction154(112),
+ new ReduceAction233(112),
+ new ReduceAction234(112),
+ new ReduceAction235(112),
+ new ReduceAction236(112),
+ new ReduceAction154(113),
+ new ReduceAction238(113),
+ new ReduceAction154(114),
+ new ReduceAction240(114),
+ new ReduceAction241(114),
+ new ReduceAction242(114),
+ new ReduceAction243(114),
+ new ReduceAction244(114),
+ new ReduceAction245(114),
+ new ReduceAction246(114),
+ new ReduceAction247(114),
+ new ReduceAction248(114),
+ new ReduceAction249(114),
+ new ReduceAction154(115),
+ new ReduceAction251(115),
+ new ReduceAction252(115),
+ new ReduceAction154(116),
+ new ReduceAction254(116),
+ new ReduceAction255(116),
+ new ReduceAction256(116),
+ new ReduceAction154(117),
+ new ReduceAction258(117),
+ new ReduceAction154(118),
+ new ReduceAction260(118),
+ new ReduceAction261(118),
+ new ReduceAction154(119),
+ new ReduceAction263(119),
+ new ReduceAction264(119),
+ new ReduceAction265(119),
+ new ReduceAction154(120),
+ new ReduceAction267(120),
+ new ReduceAction268(120),
+ new ReduceAction177(120),
+ new ReduceAction178(120),
+ new ReduceAction179(120),
+ new ReduceAction180(120),
+ new ReduceAction181(120),
+ new ReduceAction275(120),
+ new ReduceAction276(120),
+ new ReduceAction277(120),
+ new ReduceAction278(120),
+ new ReduceAction279(120),
+ new ReduceAction280(121),
+ new ReduceAction281(121),
+ new ReduceAction282(121),
+ new ReduceAction283(121),
+ new ReduceAction284(121),
+ new ReduceAction285(121),
+ new ReduceAction286(121),
+ new ReduceAction287(121),
+ new ReduceAction288(121),
+ new ReduceAction154(121),
+ new ReduceAction290(121),
+ new ReduceAction141(122),
+ new ReduceAction142(122),
+ new ReduceAction143(122),
+ new ReduceAction144(122),
+ new ReduceAction154(123),
+ new ReduceAction154(123),
+ new ReduceAction164(123),
+ new ReduceAction165(123),
+ new ReduceAction166(123),
+ new ReduceAction167(123),
+ new ReduceAction168(123),
+ new ReduceAction169(123),
new ReduceAction170(123),
- new ReduceAction249(123),
- new ReduceAction250(123),
- new ReduceAction251(123),
- new ReduceAction252(123),
- new ReduceAction170(124),
- new ReduceAction254(124),
- new ReduceAction170(125),
- new ReduceAction256(125),
- new ReduceAction257(125),
- new ReduceAction258(125),
- new ReduceAction259(125),
- new ReduceAction260(125),
- new ReduceAction261(125),
- new ReduceAction262(125),
- new ReduceAction263(125),
- new ReduceAction264(125),
- new ReduceAction265(125),
- new ReduceAction170(126),
- new ReduceAction267(126),
- new ReduceAction268(126),
- new ReduceAction170(127),
- new ReduceAction270(127),
- new ReduceAction271(127),
- new ReduceAction272(127),
- new ReduceAction170(128),
- new ReduceAction274(128),
- new ReduceAction275(128),
- new ReduceAction170(129),
- new ReduceAction277(129),
- new ReduceAction278(129),
- new ReduceAction279(129),
- new ReduceAction280(130),
- new ReduceAction281(130),
- new ReduceAction193(130),
- new ReduceAction194(130),
- new ReduceAction195(130),
- new ReduceAction196(130),
- new ReduceAction197(130),
- new ReduceAction287(130),
- new ReduceAction288(130),
- new ReduceAction292(130),
- new ReduceAction293(130),
- new ReduceAction294(130),
- new ReduceAction295(130),
- new ReduceAction296(130),
- new ReduceAction297(130),
- new ReduceAction298(130),
- new ReduceAction299(130),
- new ReduceAction300(130),
- new ReduceAction170(130),
- new ReduceAction303(130),
- new ReduceAction304(130),
- new ReduceAction305(130),
- new ReduceAction306(130),
- new ReduceAction316(131),
- new ReduceAction317(131),
- new ReduceAction318(132),
- new ReduceAction22(132),
- new ReduceAction320(133),
- new ReduceAction337(134),
- new ReduceAction338(134),
- new ReduceAction340(135),
- new ReduceAction341(135),
- new ReduceAction341(135),
- new ReduceAction157(136),
- new ReduceAction158(136),
- new ReduceAction170(137),
- new ReduceAction170(138),
- new ReduceAction247(138),
- new ReduceAction170(139),
- new ReduceAction249(139),
- new ReduceAction250(139),
- new ReduceAction251(139),
- new ReduceAction252(139),
- new ReduceAction170(140),
- new ReduceAction254(140),
- new ReduceAction170(141),
- new ReduceAction256(141),
- new ReduceAction257(141),
- new ReduceAction258(141),
- new ReduceAction259(141),
- new ReduceAction260(141),
- new ReduceAction261(141),
- new ReduceAction262(141),
- new ReduceAction263(141),
- new ReduceAction264(141),
- new ReduceAction265(141),
- new ReduceAction170(142),
- new ReduceAction267(142),
- new ReduceAction268(142),
- new ReduceAction170(143),
- new ReduceAction270(143),
- new ReduceAction271(143),
- new ReduceAction272(143),
- new ReduceAction170(144),
- new ReduceAction274(144),
- new ReduceAction275(144),
- new ReduceAction170(145),
- new ReduceAction277(145),
- new ReduceAction604(145),
- new ReduceAction605(146),
- new ReduceAction606(146),
- new ReduceAction195(146),
- new ReduceAction608(146),
- new ReduceAction288(146),
- new ReduceAction292(146),
- new ReduceAction293(146),
- new ReduceAction294(146),
- new ReduceAction295(146),
- new ReduceAction296(146),
- new ReduceAction297(146),
- new ReduceAction298(146),
- new ReduceAction299(146),
- new ReduceAction300(146),
- new ReduceAction170(146),
- new ReduceAction303(146),
- new ReduceAction304(146),
- new ReduceAction305(146),
- new ReduceAction306(146),
- new ReduceAction624(147),
- new ReduceAction625(147),
- new ReduceAction167(148),
- new ReduceAction168(148),
- new ReduceAction169(148),
- new ReduceAction170(148),
- new ReduceAction170(149),
- new ReduceAction170(149),
- new ReduceAction180(149),
- new ReduceAction181(149),
- new ReduceAction182(149),
- new ReduceAction183(149),
- new ReduceAction184(149),
- new ReduceAction185(149),
- new ReduceAction186(149),
- new ReduceAction170(149),
- new ReduceAction170(149),
- new ReduceAction170(149),
- new ReduceAction170(149),
- new ReduceAction170(149),
- new ReduceAction170(149),
- new ReduceAction193(149),
- new ReduceAction194(149),
- new ReduceAction195(149),
- new ReduceAction196(149),
- new ReduceAction197(149),
- new ReduceAction198(149),
- new ReduceAction199(149),
- new ReduceAction198(149),
- new ReduceAction201(149),
- new ReduceAction202(149),
- new ReduceAction201(149),
- new ReduceAction204(149),
- new ReduceAction207(150),
- new ReduceAction208(150),
- new ReduceAction209(150),
- new ReduceAction210(150),
- new ReduceAction211(151),
- new ReduceAction212(151),
- new ReduceAction213(151),
- new ReduceAction214(151),
- new ReduceAction215(151),
- new ReduceAction216(151),
- new ReduceAction217(151),
- new ReduceAction218(151),
- new ReduceAction219(151),
- new ReduceAction220(151),
- new ReduceAction223(152),
- new ReduceAction224(152),
- new ReduceAction225(153),
- new ReduceAction232(154),
- new ReduceAction233(154),
- new ReduceAction234(155),
- new ReduceAction235(155),
- new ReduceAction236(156),
- new ReduceAction237(156),
- new ReduceAction238(156),
- new ReduceAction239(156),
- new ReduceAction240(157),
- new ReduceAction241(157),
+ new ReduceAction154(123),
+ new ReduceAction154(123),
+ new ReduceAction154(123),
+ new ReduceAction154(123),
+ new ReduceAction154(123),
+ new ReduceAction154(123),
+ new ReduceAction177(123),
+ new ReduceAction178(123),
+ new ReduceAction179(123),
+ new ReduceAction180(123),
+ new ReduceAction181(123),
+ new ReduceAction182(123),
+ new ReduceAction183(123),
+ new ReduceAction182(123),
+ new ReduceAction185(123),
+ new ReduceAction186(123),
+ new ReduceAction185(123),
+ new ReduceAction188(123),
+ new ReduceAction195(124),
+ new ReduceAction196(124),
+ new ReduceAction197(124),
+ new ReduceAction198(124),
+ new ReduceAction199(124),
+ new ReduceAction200(124),
+ new ReduceAction201(124),
+ new ReduceAction202(124),
+ new ReduceAction203(124),
+ new ReduceAction204(124),
+ new ReduceAction154(125),
+ new ReduceAction154(126),
+ new ReduceAction231(126),
+ new ReduceAction154(127),
+ new ReduceAction233(127),
+ new ReduceAction234(127),
+ new ReduceAction235(127),
+ new ReduceAction236(127),
+ new ReduceAction154(128),
+ new ReduceAction238(128),
+ new ReduceAction154(129),
+ new ReduceAction240(129),
+ new ReduceAction241(129),
+ new ReduceAction242(129),
+ new ReduceAction243(129),
+ new ReduceAction244(129),
+ new ReduceAction245(129),
+ new ReduceAction246(129),
+ new ReduceAction247(129),
+ new ReduceAction248(129),
+ new ReduceAction249(129),
+ new ReduceAction154(130),
+ new ReduceAction251(130),
+ new ReduceAction252(130),
+ new ReduceAction154(131),
+ new ReduceAction254(131),
+ new ReduceAction255(131),
+ new ReduceAction256(131),
+ new ReduceAction154(132),
+ new ReduceAction258(132),
+ new ReduceAction154(133),
+ new ReduceAction260(133),
+ new ReduceAction261(133),
+ new ReduceAction154(134),
+ new ReduceAction263(134),
+ new ReduceAction264(134),
+ new ReduceAction265(134),
+ new ReduceAction154(135),
+ new ReduceAction267(135),
+ new ReduceAction268(135),
+ new ReduceAction177(135),
+ new ReduceAction178(135),
+ new ReduceAction179(135),
+ new ReduceAction180(135),
+ new ReduceAction181(135),
+ new ReduceAction274(135),
+ new ReduceAction275(135),
+ new ReduceAction276(135),
+ new ReduceAction277(135),
+ new ReduceAction278(135),
+ new ReduceAction279(135),
+ new ReduceAction280(136),
+ new ReduceAction281(136),
+ new ReduceAction282(136),
+ new ReduceAction283(136),
+ new ReduceAction284(136),
+ new ReduceAction285(136),
+ new ReduceAction286(136),
+ new ReduceAction287(136),
+ new ReduceAction288(136),
+ new ReduceAction154(136),
+ new ReduceAction303(137),
+ new ReduceAction304(137),
+ new ReduceAction305(138),
+ new ReduceAction22(138),
+ new ReduceAction307(139),
+ new ReduceAction307(140),
+ new ReduceAction328(141),
+ new ReduceAction329(141),
+ new ReduceAction331(142),
+ new ReduceAction315(142),
+ new ReduceAction315(142),
+ new ReduceAction141(143),
+ new ReduceAction142(143),
+ new ReduceAction154(144),
+ new ReduceAction154(145),
+ new ReduceAction231(145),
+ new ReduceAction154(146),
+ new ReduceAction233(146),
+ new ReduceAction234(146),
+ new ReduceAction235(146),
+ new ReduceAction236(146),
+ new ReduceAction154(147),
+ new ReduceAction238(147),
+ new ReduceAction154(148),
+ new ReduceAction240(148),
+ new ReduceAction241(148),
+ new ReduceAction242(148),
+ new ReduceAction243(148),
+ new ReduceAction244(148),
+ new ReduceAction245(148),
+ new ReduceAction246(148),
+ new ReduceAction247(148),
+ new ReduceAction248(148),
+ new ReduceAction249(148),
+ new ReduceAction154(149),
+ new ReduceAction251(149),
+ new ReduceAction252(149),
+ new ReduceAction154(150),
+ new ReduceAction254(150),
+ new ReduceAction255(150),
+ new ReduceAction256(150),
+ new ReduceAction154(151),
+ new ReduceAction258(151),
+ new ReduceAction154(152),
+ new ReduceAction260(152),
+ new ReduceAction261(152),
+ new ReduceAction154(153),
+ new ReduceAction263(153),
+ new ReduceAction602(153),
+ new ReduceAction154(154),
+ new ReduceAction604(154),
+ new ReduceAction605(154),
+ new ReduceAction179(154),
+ new ReduceAction607(154),
+ new ReduceAction275(154),
+ new ReduceAction276(154),
+ new ReduceAction277(154),
+ new ReduceAction278(154),
+ new ReduceAction279(154),
+ new ReduceAction280(155),
+ new ReduceAction281(155),
+ new ReduceAction282(155),
+ new ReduceAction283(155),
+ new ReduceAction284(155),
+ new ReduceAction285(155),
+ new ReduceAction286(155),
+ new ReduceAction287(155),
+ new ReduceAction288(155),
+ new ReduceAction154(155),
+ new ReduceAction623(156),
+ new ReduceAction624(156),
+ new ReduceAction151(157),
+ new ReduceAction152(157),
+ new ReduceAction153(157),
+ new ReduceAction154(157),
+ new ReduceAction154(158),
+ new ReduceAction154(158),
+ new ReduceAction164(158),
+ new ReduceAction165(158),
+ new ReduceAction166(158),
+ new ReduceAction167(158),
+ new ReduceAction168(158),
+ new ReduceAction169(158),
new ReduceAction170(158),
- new ReduceAction170(159),
- new ReduceAction170(160),
- new ReduceAction170(160),
- new ReduceAction180(160),
- new ReduceAction181(160),
- new ReduceAction182(160),
- new ReduceAction183(160),
- new ReduceAction184(160),
- new ReduceAction185(160),
- new ReduceAction186(160),
- new ReduceAction170(160),
- new ReduceAction170(160),
- new ReduceAction170(160),
- new ReduceAction170(160),
- new ReduceAction170(160),
- new ReduceAction170(160),
- new ReduceAction193(160),
- new ReduceAction194(160),
+ new ReduceAction154(158),
+ new ReduceAction154(158),
+ new ReduceAction154(158),
+ new ReduceAction154(158),
+ new ReduceAction154(158),
+ new ReduceAction154(158),
+ new ReduceAction177(158),
+ new ReduceAction178(158),
+ new ReduceAction179(158),
+ new ReduceAction180(158),
+ new ReduceAction181(158),
+ new ReduceAction182(158),
+ new ReduceAction183(158),
+ new ReduceAction182(158),
+ new ReduceAction185(158),
+ new ReduceAction186(158),
+ new ReduceAction185(158),
+ new ReduceAction188(158),
+ new ReduceAction191(159),
+ new ReduceAction192(159),
+ new ReduceAction193(159),
+ new ReduceAction194(159),
new ReduceAction195(160),
new ReduceAction196(160),
new ReduceAction197(160),
new ReduceAction198(160),
new ReduceAction199(160),
- new ReduceAction198(160),
+ new ReduceAction200(160),
new ReduceAction201(160),
new ReduceAction202(160),
- new ReduceAction201(160),
+ new ReduceAction203(160),
new ReduceAction204(160),
- new ReduceAction211(161),
- new ReduceAction212(161),
- new ReduceAction213(161),
- new ReduceAction214(161),
- new ReduceAction215(161),
- new ReduceAction216(161),
- new ReduceAction217(161),
- new ReduceAction218(161),
- new ReduceAction219(161),
- new ReduceAction220(161),
- new ReduceAction170(162),
- new ReduceAction170(163),
- new ReduceAction167(164),
- new ReduceAction168(164),
- new ReduceAction169(164),
- new ReduceAction167(165),
- new ReduceAction168(165),
- new ReduceAction169(165),
- new ReduceAction170(166),
- new ReduceAction170(166),
- new ReduceAction180(166),
- new ReduceAction181(166),
- new ReduceAction182(166),
- new ReduceAction183(166),
- new ReduceAction184(166),
- new ReduceAction185(166),
- new ReduceAction186(166),
- new ReduceAction170(166),
- new ReduceAction170(166),
- new ReduceAction170(166),
- new ReduceAction170(166),
- new ReduceAction170(166),
- new ReduceAction204(166),
- new ReduceAction170(167),
- new ReduceAction170(167),
- new ReduceAction180(167),
- new ReduceAction181(167),
- new ReduceAction182(167),
- new ReduceAction183(167),
- new ReduceAction184(167),
- new ReduceAction185(167),
- new ReduceAction186(167),
- new ReduceAction170(167),
- new ReduceAction170(167),
- new ReduceAction170(167),
- new ReduceAction170(167),
- new ReduceAction170(167),
- new ReduceAction204(167),
- new ReduceAction170(168),
- new ReduceAction170(168),
- new ReduceAction180(168),
- new ReduceAction181(168),
- new ReduceAction182(168),
- new ReduceAction183(168),
- new ReduceAction184(168),
- new ReduceAction185(168),
- new ReduceAction186(168),
- new ReduceAction170(168),
- new ReduceAction170(168),
- new ReduceAction170(168),
- new ReduceAction170(168),
- new ReduceAction170(168),
- new ReduceAction204(168),
- new ReduceAction170(169),
+ new ReduceAction207(161),
+ new ReduceAction208(161),
+ new ReduceAction209(162),
+ new ReduceAction216(163),
+ new ReduceAction217(163),
+ new ReduceAction218(164),
+ new ReduceAction219(164),
+ new ReduceAction220(165),
+ new ReduceAction221(165),
+ new ReduceAction222(165),
+ new ReduceAction223(165),
+ new ReduceAction224(166),
+ new ReduceAction225(166),
+ new ReduceAction154(167),
+ new ReduceAction154(168),
+ new ReduceAction154(169),
+ new ReduceAction154(169),
+ new ReduceAction164(169),
+ new ReduceAction165(169),
+ new ReduceAction166(169),
+ new ReduceAction167(169),
+ new ReduceAction168(169),
+ new ReduceAction169(169),
new ReduceAction170(169),
+ new ReduceAction154(169),
+ new ReduceAction154(169),
+ new ReduceAction154(169),
+ new ReduceAction154(169),
+ new ReduceAction154(169),
+ new ReduceAction154(169),
+ new ReduceAction177(169),
+ new ReduceAction178(169),
+ new ReduceAction179(169),
new ReduceAction180(169),
new ReduceAction181(169),
new ReduceAction182(169),
new ReduceAction183(169),
- new ReduceAction184(169),
+ new ReduceAction182(169),
new ReduceAction185(169),
new ReduceAction186(169),
- new ReduceAction170(169),
- new ReduceAction170(169),
- new ReduceAction170(169),
- new ReduceAction170(169),
- new ReduceAction170(169),
- new ReduceAction204(169),
- new ReduceAction344(170),
- new ReduceAction792(171),
- new ReduceAction793(171),
- new ReduceAction794(172),
- new ReduceAction795(172),
- new ReduceAction796(173),
- new ReduceAction797(173),
- new ReduceAction798(174),
- new ReduceAction799(174),
- new ReduceAction800(175),
- new ReduceAction801(175),
- new ReduceAction802(176),
- new ReduceAction803(176),
- new ReduceAction804(177),
- new ReduceAction805(177),
- new ReduceAction806(178),
- new ReduceAction807(178),
- new ReduceAction161(179),
- new ReduceAction809(179),
- new ReduceAction810(180),
- new ReduceAction811(180),
- new ReduceAction812(181),
- new ReduceAction813(181),
- new ReduceAction323(182),
- new ReduceAction815(182),
- new ReduceAction323(183),
- new ReduceAction815(183),
- new ReduceAction323(184),
- new ReduceAction815(184),
- new ReduceAction337(185),
- new ReduceAction821(185),
- new ReduceAction810(186),
- new ReduceAction811(186),
- new ReduceAction358(187),
- new ReduceAction825(187),
- new ReduceAction826(188),
- new ReduceAction827(188),
- new ReduceAction828(189),
- new ReduceAction829(189)
+ new ReduceAction185(169),
+ new ReduceAction188(169),
+ new ReduceAction195(170),
+ new ReduceAction196(170),
+ new ReduceAction197(170),
+ new ReduceAction198(170),
+ new ReduceAction199(170),
+ new ReduceAction200(170),
+ new ReduceAction201(170),
+ new ReduceAction202(170),
+ new ReduceAction203(170),
+ new ReduceAction204(170),
+ new ReduceAction154(171),
+ new ReduceAction154(172),
+ new ReduceAction151(173),
+ new ReduceAction152(173),
+ new ReduceAction153(173),
+ new ReduceAction151(174),
+ new ReduceAction152(174),
+ new ReduceAction153(174),
+ new ReduceAction154(175),
+ new ReduceAction154(175),
+ new ReduceAction164(175),
+ new ReduceAction165(175),
+ new ReduceAction166(175),
+ new ReduceAction167(175),
+ new ReduceAction168(175),
+ new ReduceAction169(175),
+ new ReduceAction170(175),
+ new ReduceAction154(175),
+ new ReduceAction154(175),
+ new ReduceAction154(175),
+ new ReduceAction154(175),
+ new ReduceAction154(175),
+ new ReduceAction188(175),
+ new ReduceAction154(176),
+ new ReduceAction154(176),
+ new ReduceAction164(176),
+ new ReduceAction165(176),
+ new ReduceAction166(176),
+ new ReduceAction167(176),
+ new ReduceAction168(176),
+ new ReduceAction169(176),
+ new ReduceAction170(176),
+ new ReduceAction154(176),
+ new ReduceAction154(176),
+ new ReduceAction154(176),
+ new ReduceAction154(176),
+ new ReduceAction154(176),
+ new ReduceAction188(176),
+ new ReduceAction154(177),
+ new ReduceAction154(177),
+ new ReduceAction164(177),
+ new ReduceAction165(177),
+ new ReduceAction166(177),
+ new ReduceAction167(177),
+ new ReduceAction168(177),
+ new ReduceAction169(177),
+ new ReduceAction170(177),
+ new ReduceAction154(177),
+ new ReduceAction154(177),
+ new ReduceAction154(177),
+ new ReduceAction154(177),
+ new ReduceAction154(177),
+ new ReduceAction188(177),
+ new ReduceAction154(178),
+ new ReduceAction154(178),
+ new ReduceAction164(178),
+ new ReduceAction165(178),
+ new ReduceAction166(178),
+ new ReduceAction167(178),
+ new ReduceAction168(178),
+ new ReduceAction169(178),
+ new ReduceAction170(178),
+ new ReduceAction154(178),
+ new ReduceAction154(178),
+ new ReduceAction154(178),
+ new ReduceAction154(178),
+ new ReduceAction154(178),
+ new ReduceAction188(178),
+ new ReduceAction335(179),
+ new ReduceAction337(179),
+ new ReduceAction792(180),
+ new ReduceAction793(180),
+ new ReduceAction794(181),
+ new ReduceAction795(181),
+ new ReduceAction796(182),
+ new ReduceAction797(182),
+ new ReduceAction798(183),
+ new ReduceAction799(183),
+ new ReduceAction800(184),
+ new ReduceAction801(184),
+ new ReduceAction802(185),
+ new ReduceAction803(185),
+ new ReduceAction804(186),
+ new ReduceAction805(186),
+ new ReduceAction806(187),
+ new ReduceAction807(187),
+ new ReduceAction145(188),
+ new ReduceAction809(188),
+ new ReduceAction810(189),
+ new ReduceAction811(189),
+ new ReduceAction812(190),
+ new ReduceAction813(190),
+ new ReduceAction310(191),
+ new ReduceAction815(191),
+ new ReduceAction310(192),
+ new ReduceAction815(192),
+ new ReduceAction310(193),
+ new ReduceAction815(193),
+ new ReduceAction328(194),
+ new ReduceAction821(194),
+ new ReduceAction810(195),
+ new ReduceAction811(195),
+ new ReduceAction349(196),
+ new ReduceAction825(196),
+ new ReduceAction826(197),
+ new ReduceAction827(197),
+ new ReduceAction828(198),
+ new ReduceAction829(198)
)
end
end
assert pvisibilitynode4 isa nullable AVisibility
var tkwmethnode5 = nodearraylist4
assert tkwmethnode5 isa nullable TKwmeth
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pexprnode9 = nodearraylist8
- assert pexprnode9 isa nullable AExpr
- var ppropdefnode1: nullable AConcreteMethPropdef = new AConcreteMethPropdef.init_aconcretemethpropdef(
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pexprnode13 = nodearraylist8
+ assert pexprnode13 isa nullable AExpr
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
tkwmethnode5,
- pmethidnode6,
- psignaturenode7,
null,
- pexprnode9
+ null,
+ pmethidnode8,
+ psignaturenode9,
+ null,
+ null,
+ null,
+ pexprnode13
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
assert pvisibilitynode4 isa nullable AVisibility
var tkwmethnode5 = nodearraylist4
assert tkwmethnode5 isa nullable TKwmeth
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pannotationsnode8 = nodearraylist7
- assert pannotationsnode8 isa nullable AAnnotations
- var pexprnode9 = nodearraylist9
- assert pexprnode9 isa nullable AExpr
- var ppropdefnode1: nullable AConcreteMethPropdef = new AConcreteMethPropdef.init_aconcretemethpropdef(
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist7
+ assert pannotationsnode10 isa nullable AAnnotations
+ var pexprnode13 = nodearraylist9
+ assert pexprnode13 isa nullable AExpr
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
tkwmethnode5,
- pmethidnode6,
- psignaturenode7,
- pannotationsnode8,
- pexprnode9
+ null,
+ null,
+ pmethidnode8,
+ psignaturenode9,
+ pannotationsnode10,
+ null,
+ null,
+ pexprnode13
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
assert pvisibilitynode4 isa nullable AVisibility
var tkwmethnode5 = nodearraylist4
assert tkwmethnode5 isa nullable TKwmeth
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pannotationsnode8 = nodearraylist7
- assert pannotationsnode8 isa nullable AAnnotations
- var ppropdefnode1: nullable ADeferredMethPropdef = new ADeferredMethPropdef.init_adeferredmethpropdef(
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist7
+ assert pannotationsnode10 isa nullable AAnnotations
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
tkwmethnode5,
- pmethidnode6,
- psignaturenode7,
- pannotationsnode8
+ null,
+ null,
+ pmethidnode8,
+ psignaturenode9,
+ pannotationsnode10,
+ null,
+ null,
+ null
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
var nodearraylist4 = p.pop
assert tkwredefnode3 isa nullable TKwredef
var pvisibilitynode4 = nodearraylist3
assert pvisibilitynode4 isa nullable AVisibility
- var tkwmethnode5 = nodearraylist4
- assert tkwmethnode5 isa nullable TKwmeth
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var ppropdefnode1: nullable ADeferredMethPropdef = new ADeferredMethPropdef.init_adeferredmethpropdef(
+ var tkwnewnode7 = nodearraylist4
+ assert tkwnewnode7 isa nullable TKwnew
+ var psignaturenode9 = nodearraylist5
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist6
+ assert pannotationsnode10 isa nullable AAnnotations
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
- tkwmethnode5,
- pmethidnode6,
- psignaturenode7,
+ null,
+ null,
+ tkwnewnode7,
+ null,
+ psignaturenode9,
+ pannotationsnode10,
+ null,
+ null,
null
)
node_list = ppropdefnode1
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
assert tkwredefnode3 isa nullable TKwredef
var pvisibilitynode4 = nodearraylist3
assert pvisibilitynode4 isa nullable AVisibility
- var tkwmethnode5 = nodearraylist4
- assert tkwmethnode5 isa nullable TKwmeth
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var ppropdefnode1: nullable AInternMethPropdef = new AInternMethPropdef.init_ainternmethpropdef(
+ var tkwnewnode7 = nodearraylist4
+ assert tkwnewnode7 isa nullable TKwnew
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist7
+ assert pannotationsnode10 isa nullable AAnnotations
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
- tkwmethnode5,
- pmethidnode6,
- psignaturenode7
+ null,
+ null,
+ tkwnewnode7,
+ pmethidnode8,
+ psignaturenode9,
+ pannotationsnode10,
+ null,
+ null,
+ null
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
assert tkwredefnode3 isa nullable TKwredef
var pvisibilitynode4 = nodearraylist3
assert pvisibilitynode4 isa nullable AVisibility
- var tkwnewnode5 = nodearraylist4
- assert tkwnewnode5 isa nullable TKwnew
- var psignaturenode7 = nodearraylist5
- assert psignaturenode7 isa nullable ASignature
- var ppropdefnode1: nullable AInternNewPropdef = new AInternNewPropdef.init_ainternnewpropdef(
+ var tkwmethnode5 = nodearraylist4
+ assert tkwmethnode5 isa nullable TKwmeth
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pexterncallsnode11 = nodearraylist7
+ assert pexterncallsnode11 isa nullable AExternCalls
+ var pexterncodeblocknode12 = nodearraylist8
+ assert pexterncodeblocknode12 isa nullable AExternCodeBlock
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
- tkwnewnode5,
+ tkwmethnode5,
+ null,
+ null,
+ pmethidnode8,
+ psignaturenode9,
null,
- psignaturenode7
+ pexterncallsnode11,
+ pexterncodeblocknode12,
+ null
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
assert tkwredefnode3 isa nullable TKwredef
var pvisibilitynode4 = nodearraylist3
assert pvisibilitynode4 isa nullable AVisibility
- var tkwnewnode5 = nodearraylist4
- assert tkwnewnode5 isa nullable TKwnew
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var ppropdefnode1: nullable AInternNewPropdef = new AInternNewPropdef.init_ainternnewpropdef(
+ var tkwmethnode5 = nodearraylist4
+ assert tkwmethnode5 isa nullable TKwmeth
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist7
+ assert pannotationsnode10 isa nullable AAnnotations
+ var pexterncallsnode11 = nodearraylist8
+ assert pexterncallsnode11 isa nullable AExternCalls
+ var pexterncodeblocknode12 = nodearraylist9
+ assert pexterncodeblocknode12 isa nullable AExternCodeBlock
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
- tkwnewnode5,
- pmethidnode6,
- psignaturenode7
+ tkwmethnode5,
+ null,
+ null,
+ pmethidnode8,
+ psignaturenode9,
+ pannotationsnode10,
+ pexterncallsnode11,
+ pexterncodeblocknode12,
+ null
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist11 = p.pop
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
assert tkwredefnode3 isa nullable TKwredef
var pvisibilitynode4 = nodearraylist3
assert pvisibilitynode4 isa nullable AVisibility
- var tkwmethnode5 = nodearraylist4
- assert tkwmethnode5 isa nullable TKwmeth
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var tstringnode9 = nodearraylist9
- assert tstringnode9 isa nullable TString
- var pexterncallsnode10 = nodearraylist10
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist11
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternMethPropdef = new AExternMethPropdef.init_aexternmethpropdef(
+ var tkwvarnode5 = nodearraylist4
+ assert tkwvarnode5 isa nullable TKwvar
+ var tidnode6 = nodearraylist5
+ assert tidnode6 isa nullable TId
+ var ptypenode7 = nodearraylist6
+ assert ptypenode7 isa nullable AType
+ var pannotationsnode9 = nodearraylist7
+ assert pannotationsnode9 isa nullable AAnnotations
+ var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
- tkwmethnode5,
- pmethidnode6,
- psignaturenode7,
+ tkwvarnode5,
+ tidnode6,
+ ptypenode7,
null,
- tstringnode9,
- pexterncallsnode10,
- pexterncodeblocknode11
+ pannotationsnode9
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist10 = p.pop
+ var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
assert tkwredefnode3 isa nullable TKwredef
var pvisibilitynode4 = nodearraylist3
assert pvisibilitynode4 isa nullable AVisibility
- var tkwmethnode5 = nodearraylist4
- assert tkwmethnode5 isa nullable TKwmeth
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pexterncallsnode10 = nodearraylist7
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist8
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternMethPropdef = new AExternMethPropdef.init_aexternmethpropdef(
+ var tkwvarnode5 = nodearraylist4
+ assert tkwvarnode5 isa nullable TKwvar
+ var tidnode6 = nodearraylist5
+ assert tidnode6 isa nullable TId
+ var ptypenode7 = nodearraylist6
+ assert ptypenode7 isa nullable AType
+ var pexprnode8 = nodearraylist9
+ assert pexprnode8 isa nullable AExpr
+ var pannotationsnode9 = nodearraylist10
+ assert pannotationsnode9 isa nullable AAnnotations
+ var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
- tkwmethnode5,
- pmethidnode6,
- psignaturenode7,
- null,
- null,
- pexterncallsnode10,
- pexterncodeblocknode11
+ tkwvarnode5,
+ tidnode6,
+ ptypenode7,
+ pexprnode8,
+ pannotationsnode9
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
assert tkwredefnode3 isa nullable TKwredef
var pvisibilitynode4 = nodearraylist3
assert pvisibilitynode4 isa nullable AVisibility
- var tkwmethnode5 = nodearraylist4
- assert tkwmethnode5 isa nullable TKwmeth
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pannotationsnode8 = nodearraylist7
- assert pannotationsnode8 isa nullable AAnnotations
- var pexterncallsnode10 = nodearraylist8
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist9
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternMethPropdef = new AExternMethPropdef.init_aexternmethpropdef(
+ var tkwinitnode6 = nodearraylist4
+ assert tkwinitnode6 isa nullable TKwinit
+ var psignaturenode9 = nodearraylist5
+ assert psignaturenode9 isa nullable ASignature
+ var pexprnode13 = nodearraylist7
+ assert pexprnode13 isa nullable AExpr
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
tkwredefnode3,
pvisibilitynode4,
- tkwmethnode5,
- pmethidnode6,
- psignaturenode7,
- pannotationsnode8,
null,
- pexterncallsnode10,
- pexterncodeblocknode11
+ tkwinitnode6,
+ null,
+ null,
+ psignaturenode9,
+ null,
+ null,
+ null,
+ pexprnode13
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist9 = p.pop
+ var nodearraylist8 = p.pop
+ var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
var nodearraylist4 = p.pop
var nodearraylist1 = p.pop
var pdocnode2 = nodearraylist1
assert pdocnode2 isa nullable ADoc
- var tkwredefnode5 = nodearraylist2
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist3
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist4
- assert tkwvarnode7 isa nullable TKwvar
- var tattridnode8 = nodearraylist5
- assert tattridnode8 isa nullable TAttrid
- var ptypenode10 = nodearraylist6
- assert ptypenode10 isa nullable AType
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
+ var tkwredefnode3 = nodearraylist2
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist3
+ assert pvisibilitynode4 isa nullable AVisibility
+ var tkwinitnode6 = nodearraylist4
+ assert tkwinitnode6 isa nullable TKwinit
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pexprnode13 = nodearraylist8
+ assert pexprnode13 isa nullable AExpr
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
+ tkwredefnode3,
+ pvisibilitynode4,
null,
+ tkwinitnode6,
null,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- tattridnode8,
+ pmethidnode8,
+ psignaturenode9,
null,
- ptypenode10,
null,
- null
+ null,
+ pexprnode13
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist9 = p.pop
+ var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
var nodearraylist1 = p.pop
var pdocnode2 = nodearraylist1
assert pdocnode2 isa nullable ADoc
- var pablenode3 = nodearraylist2
- assert pablenode3 isa nullable AAble
- var tkwredefnode5 = nodearraylist3
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist4
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist5
- assert tkwvarnode7 isa nullable TKwvar
- var tattridnode8 = nodearraylist6
- assert tattridnode8 isa nullable TAttrid
- var ptypenode10 = nodearraylist7
- assert ptypenode10 isa nullable AType
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
+ var tkwredefnode3 = nodearraylist2
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist3
+ assert pvisibilitynode4 isa nullable AVisibility
+ var tkwinitnode6 = nodearraylist4
+ assert tkwinitnode6 isa nullable TKwinit
+ var psignaturenode9 = nodearraylist5
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist6
+ assert pannotationsnode10 isa nullable AAnnotations
+ var pexprnode13 = nodearraylist8
+ assert pexprnode13 isa nullable AExpr
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
- pablenode3,
+ tkwredefnode3,
+ pvisibilitynode4,
null,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- tattridnode8,
+ tkwinitnode6,
null,
- ptypenode10,
null,
- null
+ psignaturenode9,
+ pannotationsnode10,
+ null,
+ null,
+ pexprnode13
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist10 = p.pop
+ var nodearraylist9 = p.pop
+ var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
var nodearraylist1 = p.pop
var pdocnode2 = nodearraylist1
assert pdocnode2 isa nullable ADoc
- var pablenode4 = nodearraylist2
- assert pablenode4 isa nullable AAble
- var tkwredefnode5 = nodearraylist3
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist4
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist5
- assert tkwvarnode7 isa nullable TKwvar
- var tattridnode8 = nodearraylist6
- assert tattridnode8 isa nullable TAttrid
- var ptypenode10 = nodearraylist7
- assert ptypenode10 isa nullable AType
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
+ var tkwredefnode3 = nodearraylist2
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist3
+ assert pvisibilitynode4 isa nullable AVisibility
+ var tkwinitnode6 = nodearraylist4
+ assert tkwinitnode6 isa nullable TKwinit
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist7
+ assert pannotationsnode10 isa nullable AAnnotations
+ var pexprnode13 = nodearraylist9
+ assert pexprnode13 isa nullable AExpr
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
+ tkwredefnode3,
+ pvisibilitynode4,
null,
- pablenode4,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- tattridnode8,
+ tkwinitnode6,
null,
- ptypenode10,
+ pmethidnode8,
+ psignaturenode9,
+ pannotationsnode10,
null,
- null
+ null,
+ pexprnode13
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
var nodearraylist1 = p.pop
var pdocnode2 = nodearraylist1
assert pdocnode2 isa nullable ADoc
- var pablenode3 = nodearraylist2
- assert pablenode3 isa nullable AAble
- var pablenode4 = nodearraylist3
- assert pablenode4 isa nullable AAble
- var tkwredefnode5 = nodearraylist4
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist5
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist6
- assert tkwvarnode7 isa nullable TKwvar
- var tattridnode8 = nodearraylist7
- assert tattridnode8 isa nullable TAttrid
- var ptypenode10 = nodearraylist8
- assert ptypenode10 isa nullable AType
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
+ var tkwredefnode3 = nodearraylist2
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist3
+ assert pvisibilitynode4 isa nullable AVisibility
+ var tkwtypenode5 = nodearraylist4
+ assert tkwtypenode5 isa nullable TKwtype
+ var tclassidnode6 = nodearraylist5
+ assert tclassidnode6 isa nullable TClassid
+ var ptypenode7 = nodearraylist6
+ assert ptypenode7 isa nullable AType
+ var pannotationsnode8 = nodearraylist7
+ assert pannotationsnode8 isa nullable AAnnotations
+ var ppropdefnode1: nullable ATypePropdef = new ATypePropdef.init_atypepropdef(
pdocnode2,
- pablenode3,
- pablenode4,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- tattridnode8,
- null,
- ptypenode10,
- null,
- null
+ tkwredefnode3,
+ pvisibilitynode4,
+ tkwtypenode5,
+ tclassidnode6,
+ ptypenode7,
+ pannotationsnode8
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist5 = p.pop
var nodearraylist1 = p.pop
var pdocnode2 = nodearraylist1
assert pdocnode2 isa nullable ADoc
- var tkwredefnode5 = nodearraylist2
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist3
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist4
- assert tkwvarnode7 isa nullable TKwvar
- var tattridnode8 = nodearraylist5
- assert tattridnode8 isa nullable TAttrid
- var ptypenode10 = nodearraylist6
- assert ptypenode10 isa nullable AType
- var pexprnode12 = nodearraylist9
- assert pexprnode12 isa nullable AExpr
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
+ var tkwredefnode3 = nodearraylist2
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist3
+ assert pvisibilitynode4 isa nullable AVisibility
+ var tkwnewnode7 = nodearraylist4
+ assert tkwnewnode7 isa nullable TKwnew
+ var psignaturenode9 = nodearraylist5
+ assert psignaturenode9 isa nullable ASignature
+ var pexterncallsnode11 = nodearraylist6
+ assert pexterncallsnode11 isa nullable AExternCalls
+ var pexterncodeblocknode12 = nodearraylist7
+ assert pexterncodeblocknode12 isa nullable AExternCodeBlock
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
+ tkwredefnode3,
+ pvisibilitynode4,
null,
null,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- tattridnode8,
+ tkwnewnode7,
null,
- ptypenode10,
+ psignaturenode9,
null,
- pexprnode12
+ pexterncallsnode11,
+ pexterncodeblocknode12,
+ null
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist1 = p.pop
var pdocnode2 = nodearraylist1
assert pdocnode2 isa nullable ADoc
- var pablenode3 = nodearraylist2
- assert pablenode3 isa nullable AAble
- var tkwredefnode5 = nodearraylist3
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist4
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist5
- assert tkwvarnode7 isa nullable TKwvar
- var tattridnode8 = nodearraylist6
- assert tattridnode8 isa nullable TAttrid
- var ptypenode10 = nodearraylist7
- assert ptypenode10 isa nullable AType
- var pexprnode12 = nodearraylist10
- assert pexprnode12 isa nullable AExpr
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
+ var tkwredefnode3 = nodearraylist2
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist3
+ assert pvisibilitynode4 isa nullable AVisibility
+ var tkwnewnode7 = nodearraylist4
+ assert tkwnewnode7 isa nullable TKwnew
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pexterncallsnode11 = nodearraylist7
+ assert pexterncallsnode11 isa nullable AExternCalls
+ var pexterncodeblocknode12 = nodearraylist8
+ assert pexterncodeblocknode12 isa nullable AExternCodeBlock
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
- pablenode3,
+ tkwredefnode3,
+ pvisibilitynode4,
null,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- tattridnode8,
null,
- ptypenode10,
+ tkwnewnode7,
+ pmethidnode8,
+ psignaturenode9,
null,
- pexprnode12
+ pexterncallsnode11,
+ pexterncodeblocknode12,
+ null
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist1 = p.pop
var pdocnode2 = nodearraylist1
assert pdocnode2 isa nullable ADoc
- var pablenode4 = nodearraylist2
- assert pablenode4 isa nullable AAble
- var tkwredefnode5 = nodearraylist3
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist4
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist5
- assert tkwvarnode7 isa nullable TKwvar
- var tattridnode8 = nodearraylist6
- assert tattridnode8 isa nullable TAttrid
- var ptypenode10 = nodearraylist7
- assert ptypenode10 isa nullable AType
- var pexprnode12 = nodearraylist10
- assert pexprnode12 isa nullable AExpr
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
+ var tkwredefnode3 = nodearraylist2
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist3
+ assert pvisibilitynode4 isa nullable AVisibility
+ var tkwnewnode7 = nodearraylist4
+ assert tkwnewnode7 isa nullable TKwnew
+ var psignaturenode9 = nodearraylist5
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist6
+ assert pannotationsnode10 isa nullable AAnnotations
+ var pexterncallsnode11 = nodearraylist7
+ assert pexterncallsnode11 isa nullable AExternCalls
+ var pexterncodeblocknode12 = nodearraylist8
+ assert pexterncodeblocknode12 isa nullable AExternCodeBlock
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
+ tkwredefnode3,
+ pvisibilitynode4,
null,
- pablenode4,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- tattridnode8,
null,
- ptypenode10,
+ tkwnewnode7,
null,
- pexprnode12
+ psignaturenode9,
+ pannotationsnode10,
+ pexterncallsnode11,
+ pexterncodeblocknode12,
+ null
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist11 = p.pop
- var nodearraylist10 = p.pop
var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist1 = p.pop
var pdocnode2 = nodearraylist1
assert pdocnode2 isa nullable ADoc
- var pablenode3 = nodearraylist2
- assert pablenode3 isa nullable AAble
- var pablenode4 = nodearraylist3
- assert pablenode4 isa nullable AAble
- var tkwredefnode5 = nodearraylist4
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist5
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist6
- assert tkwvarnode7 isa nullable TKwvar
- var tattridnode8 = nodearraylist7
- assert tattridnode8 isa nullable TAttrid
- var ptypenode10 = nodearraylist8
- assert ptypenode10 isa nullable AType
- var pexprnode12 = nodearraylist11
- assert pexprnode12 isa nullable AExpr
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
+ var tkwredefnode3 = nodearraylist2
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist3
+ assert pvisibilitynode4 isa nullable AVisibility
+ var tkwnewnode7 = nodearraylist4
+ assert tkwnewnode7 isa nullable TKwnew
+ var pmethidnode8 = nodearraylist5
+ assert pmethidnode8 isa nullable AMethid
+ var psignaturenode9 = nodearraylist6
+ assert psignaturenode9 isa nullable ASignature
+ var pannotationsnode10 = nodearraylist7
+ assert pannotationsnode10 isa nullable AAnnotations
+ var pexterncallsnode11 = nodearraylist8
+ assert pexterncallsnode11 isa nullable AExternCalls
+ var pexterncodeblocknode12 = nodearraylist9
+ assert pexterncodeblocknode12 isa nullable AExternCodeBlock
+ var ppropdefnode1: nullable AMethPropdef = new AMethPropdef.init_amethpropdef(
pdocnode2,
- pablenode3,
- pablenode4,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- tattridnode8,
+ tkwredefnode3,
+ pvisibilitynode4,
null,
- ptypenode10,
null,
- pexprnode12
+ tkwnewnode7,
+ pmethidnode8,
+ psignaturenode9,
+ pannotationsnode10,
+ pexterncallsnode11,
+ pexterncodeblocknode12,
+ null
)
node_list = ppropdefnode1
p.push(p.go_to(_goto), node_list)
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
var nodearraylist2 = p.pop
var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode5 = nodearraylist2
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist3
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist4
- assert tkwvarnode7 isa nullable TKwvar
- var tidnode9 = nodearraylist5
- assert tidnode9 isa nullable TId
- var ptypenode10 = nodearraylist6
- assert ptypenode10 isa nullable AType
- var pannotationsnode11 = nodearraylist7
- assert pannotationsnode11 isa nullable AAnnotations
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
- pdocnode2,
- null,
- null,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- null,
- tidnode9,
- ptypenode10,
- pannotationsnode11,
- null
- )
- node_list = ppropdefnode1
+ var pannotationsnode1 = nodearraylist2
+ node_list = pannotationsnode1
p.push(p.go_to(_goto), node_list)
end
end
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
var nodearraylist4 = p.pop
var nodearraylist3 = p.pop
var nodearraylist2 = p.pop
var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var pablenode4 = nodearraylist7
- assert pablenode4 isa nullable AAble
- var tkwredefnode5 = nodearraylist2
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist3
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist4
- assert tkwvarnode7 isa nullable TKwvar
- var tidnode9 = nodearraylist5
- assert tidnode9 isa nullable TId
- var ptypenode10 = nodearraylist6
- assert ptypenode10 isa nullable AType
- var pannotationsnode11 = nodearraylist8
- assert pannotationsnode11 isa nullable AAnnotations
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
- pdocnode2,
- null,
- pablenode4,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- null,
- tidnode9,
- ptypenode10,
- pannotationsnode11,
- null
- )
- node_list = ppropdefnode1
+ var pannotationsnode1 = nodearraylist3
+ node_list = pannotationsnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction77
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode5 = nodearraylist2
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist3
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist4
- assert tkwvarnode7 isa nullable TKwvar
- var tidnode9 = nodearraylist5
- assert tidnode9 isa nullable TId
- var ptypenode10 = nodearraylist6
- assert ptypenode10 isa nullable AType
- var pannotationsnode11 = nodearraylist10
- assert pannotationsnode11 isa nullable AAnnotations
- var pexprnode12 = nodearraylist9
- assert pexprnode12 isa nullable AExpr
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
- pdocnode2,
- null,
- null,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- null,
- tidnode9,
- ptypenode10,
- pannotationsnode11,
- pexprnode12
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction78
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist11 = p.pop
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var pablenode4 = nodearraylist7
- assert pablenode4 isa nullable AAble
- var tkwredefnode5 = nodearraylist2
- assert tkwredefnode5 isa nullable TKwredef
- var pvisibilitynode6 = nodearraylist3
- assert pvisibilitynode6 isa nullable AVisibility
- var tkwvarnode7 = nodearraylist4
- assert tkwvarnode7 isa nullable TKwvar
- var tidnode9 = nodearraylist5
- assert tidnode9 isa nullable TId
- var ptypenode10 = nodearraylist6
- assert ptypenode10 isa nullable AType
- var pannotationsnode11 = nodearraylist11
- assert pannotationsnode11 isa nullable AAnnotations
- var pexprnode12 = nodearraylist10
- assert pexprnode12 isa nullable AExpr
- var ppropdefnode1: nullable AAttrPropdef = new AAttrPropdef.init_aattrpropdef(
- pdocnode2,
- null,
- pablenode4,
- tkwredefnode5,
- pvisibilitynode6,
- tkwvarnode7,
- null,
- tidnode9,
- ptypenode10,
- pannotationsnode11,
- pexprnode12
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction79
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwinitnode5 = nodearraylist4
- assert tkwinitnode5 isa nullable TKwinit
- var psignaturenode7 = nodearraylist5
- assert psignaturenode7 isa nullable ASignature
- var pexprnode9 = nodearraylist7
- assert pexprnode9 isa nullable AExpr
- var ppropdefnode1: nullable AConcreteInitPropdef = new AConcreteInitPropdef.init_aconcreteinitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwinitnode5,
- null,
- psignaturenode7,
- null,
- pexprnode9
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction80
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwinitnode5 = nodearraylist4
- assert tkwinitnode5 isa nullable TKwinit
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pexprnode9 = nodearraylist8
- assert pexprnode9 isa nullable AExpr
- var ppropdefnode1: nullable AConcreteInitPropdef = new AConcreteInitPropdef.init_aconcreteinitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwinitnode5,
- pmethidnode6,
- psignaturenode7,
- null,
- pexprnode9
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction81
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwinitnode5 = nodearraylist4
- assert tkwinitnode5 isa nullable TKwinit
- var psignaturenode7 = nodearraylist5
- assert psignaturenode7 isa nullable ASignature
- var pannotationsnode8 = nodearraylist6
- assert pannotationsnode8 isa nullable AAnnotations
- var pexprnode9 = nodearraylist8
- assert pexprnode9 isa nullable AExpr
- var ppropdefnode1: nullable AConcreteInitPropdef = new AConcreteInitPropdef.init_aconcreteinitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwinitnode5,
- null,
- psignaturenode7,
- pannotationsnode8,
- pexprnode9
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction82
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwinitnode5 = nodearraylist4
- assert tkwinitnode5 isa nullable TKwinit
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pannotationsnode8 = nodearraylist7
- assert pannotationsnode8 isa nullable AAnnotations
- var pexprnode9 = nodearraylist9
- assert pexprnode9 isa nullable AExpr
- var ppropdefnode1: nullable AConcreteInitPropdef = new AConcreteInitPropdef.init_aconcreteinitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwinitnode5,
- pmethidnode6,
- psignaturenode7,
- pannotationsnode8,
- pexprnode9
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction83
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwtypenode5 = nodearraylist4
- assert tkwtypenode5 isa nullable TKwtype
- var tclassidnode6 = nodearraylist5
- assert tclassidnode6 isa nullable TClassid
- var ptypenode7 = nodearraylist6
- assert ptypenode7 isa nullable AType
- var pannotationsnode8 = nodearraylist7
- assert pannotationsnode8 isa nullable AAnnotations
- var ppropdefnode1: nullable ATypePropdef = new ATypePropdef.init_atypepropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwtypenode5,
- tclassidnode6,
- ptypenode7,
- pannotationsnode8
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction84
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwnewnode5 = nodearraylist4
- assert tkwnewnode5 isa nullable TKwnew
- var psignaturenode7 = nodearraylist5
- assert psignaturenode7 isa nullable ASignature
- var tstringnode9 = nodearraylist8
- assert tstringnode9 isa nullable TString
- var pexterncallsnode10 = nodearraylist9
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist10
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternInitPropdef = new AExternInitPropdef.init_aexterninitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwnewnode5,
- null,
- psignaturenode7,
- null,
- tstringnode9,
- pexterncallsnode10,
- pexterncodeblocknode11
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction85
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist11 = p.pop
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwnewnode5 = nodearraylist4
- assert tkwnewnode5 isa nullable TKwnew
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var tstringnode9 = nodearraylist9
- assert tstringnode9 isa nullable TString
- var pexterncallsnode10 = nodearraylist10
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist11
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternInitPropdef = new AExternInitPropdef.init_aexterninitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwnewnode5,
- pmethidnode6,
- psignaturenode7,
- null,
- tstringnode9,
- pexterncallsnode10,
- pexterncodeblocknode11
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction86
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwnewnode5 = nodearraylist4
- assert tkwnewnode5 isa nullable TKwnew
- var psignaturenode7 = nodearraylist5
- assert psignaturenode7 isa nullable ASignature
- var pexterncallsnode10 = nodearraylist6
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist7
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternInitPropdef = new AExternInitPropdef.init_aexterninitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwnewnode5,
- null,
- psignaturenode7,
- null,
- null,
- pexterncallsnode10,
- pexterncodeblocknode11
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction87
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwnewnode5 = nodearraylist4
- assert tkwnewnode5 isa nullable TKwnew
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pexterncallsnode10 = nodearraylist7
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist8
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternInitPropdef = new AExternInitPropdef.init_aexterninitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwnewnode5,
- pmethidnode6,
- psignaturenode7,
- null,
- null,
- pexterncallsnode10,
- pexterncodeblocknode11
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction88
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwnewnode5 = nodearraylist4
- assert tkwnewnode5 isa nullable TKwnew
- var psignaturenode7 = nodearraylist5
- assert psignaturenode7 isa nullable ASignature
- var pannotationsnode8 = nodearraylist6
- assert pannotationsnode8 isa nullable AAnnotations
- var pexterncallsnode10 = nodearraylist7
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist8
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternInitPropdef = new AExternInitPropdef.init_aexterninitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwnewnode5,
- null,
- psignaturenode7,
- pannotationsnode8,
- null,
- pexterncallsnode10,
- pexterncodeblocknode11
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction89
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pdocnode2 = nodearraylist1
- assert pdocnode2 isa nullable ADoc
- var tkwredefnode3 = nodearraylist2
- assert tkwredefnode3 isa nullable TKwredef
- var pvisibilitynode4 = nodearraylist3
- assert pvisibilitynode4 isa nullable AVisibility
- var tkwnewnode5 = nodearraylist4
- assert tkwnewnode5 isa nullable TKwnew
- var pmethidnode6 = nodearraylist5
- assert pmethidnode6 isa nullable AMethid
- var psignaturenode7 = nodearraylist6
- assert psignaturenode7 isa nullable ASignature
- var pannotationsnode8 = nodearraylist7
- assert pannotationsnode8 isa nullable AAnnotations
- var pexterncallsnode10 = nodearraylist8
- assert pexterncallsnode10 isa nullable AExternCalls
- var pexterncodeblocknode11 = nodearraylist9
- assert pexterncodeblocknode11 isa nullable AExternCodeBlock
- var ppropdefnode1: nullable AExternInitPropdef = new AExternInitPropdef.init_aexterninitpropdef(
- pdocnode2,
- tkwredefnode3,
- pvisibilitynode4,
- tkwnewnode5,
- pmethidnode6,
- psignaturenode7,
- pannotationsnode8,
- null,
- pexterncallsnode10,
- pexterncodeblocknode11
- )
- node_list = ppropdefnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction90
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pannotationsnode1 = nodearraylist2
- node_list = pannotationsnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction91
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pannotationsnode1 = nodearraylist3
- node_list = pannotationsnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction94
+private class ReduceAction79
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction95
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var tkwredefnode2 = nodearraylist1
- assert tkwredefnode2 isa nullable TKwredef
- var tkwreadablenode3 = nodearraylist3
- assert tkwreadablenode3 isa nullable TKwreadable
- var pablenode1: nullable AReadAble = new AReadAble.init_areadable(
- tkwredefnode2,
- tkwreadablenode3
- )
- node_list = pablenode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction96
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var tkwredefnode2 = nodearraylist1
- assert tkwredefnode2 isa nullable TKwredef
- var pvisibilitynode3 = nodearraylist2
- assert pvisibilitynode3 isa nullable AVisibility
- var tkwwritablenode4 = nodearraylist3
- assert tkwwritablenode4 isa nullable TKwwritable
- var pablenode1: nullable AWriteAble = new AWriteAble.init_awriteable(
- tkwredefnode2,
- pvisibilitynode3,
- tkwwritablenode4
- )
- node_list = pablenode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction97
+private class ReduceAction80
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction98
+private class ReduceAction81
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction99
+private class ReduceAction82
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction100
+private class ReduceAction83
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction101
+private class ReduceAction84
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction102
+private class ReduceAction85
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction103
+private class ReduceAction86
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction104
+private class ReduceAction87
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction105
+private class ReduceAction88
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction106
+private class ReduceAction89
+ super ReduceAction
+ redef fun action(p: Parser)
+ do
+ var node_list: nullable Object = null
+ var nodearraylist1 = p.pop
+ var tstarstarnode2 = nodearraylist1
+ assert tstarstarnode2 isa nullable TStarstar
+ var pmethidnode1: nullable AStarstarMethid = new AStarstarMethid.init_astarstarmethid(
+ tstarstarnode2
+ )
+ node_list = pmethidnode1
+ p.push(p.go_to(_goto), node_list)
+ end
+end
+private class ReduceAction90
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction107
+private class ReduceAction91
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction108
+private class ReduceAction92
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction109
+private class ReduceAction93
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction110
+private class ReduceAction94
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction111
+private class ReduceAction95
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction112
+private class ReduceAction96
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction113
+private class ReduceAction97
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction114
+private class ReduceAction98
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction115
+private class ReduceAction99
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction116
+private class ReduceAction100
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction117
+private class ReduceAction101
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction118
+private class ReduceAction102
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction119
+private class ReduceAction103
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction120
+private class ReduceAction104
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction121
+private class ReduceAction105
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction122
+private class ReduceAction106
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction123
+private class ReduceAction107
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction124
+private class ReduceAction108
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction125
+private class ReduceAction109
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction127
+private class ReduceAction111
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction128
+private class ReduceAction112
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction129
+private class ReduceAction113
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction130
+private class ReduceAction114
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction131
+private class ReduceAction115
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction132
+private class ReduceAction116
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction133
+private class ReduceAction117
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction134
+private class ReduceAction118
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction136
+private class ReduceAction120
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction137
+private class ReduceAction121
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction139
+private class ReduceAction123
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction140
+private class ReduceAction124
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction141
+private class ReduceAction125
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction142
+private class ReduceAction126
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction143
+private class ReduceAction127
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction144
+private class ReduceAction128
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction145
+private class ReduceAction129
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction146
+private class ReduceAction130
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction147
+private class ReduceAction131
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction148
+private class ReduceAction132
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction150
+private class ReduceAction134
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction151
+private class ReduceAction135
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction152
+private class ReduceAction136
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction153
+private class ReduceAction137
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction154
+private class ReduceAction138
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction156
+private class ReduceAction140
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction157
+private class ReduceAction141
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction158
+private class ReduceAction142
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction159
+private class ReduceAction143
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction160
+private class ReduceAction144
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction161
+private class ReduceAction145
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction162
+private class ReduceAction146
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction163
+private class ReduceAction147
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction167
+private class ReduceAction151
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction168
+private class ReduceAction152
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction169
+private class ReduceAction153
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction170
+private class ReduceAction154
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction171
+private class ReduceAction155
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction172
+private class ReduceAction156
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction173
+private class ReduceAction157
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction174
+private class ReduceAction158
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction175
+private class ReduceAction159
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction176
+private class ReduceAction160
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction180
+private class ReduceAction164
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction181
+private class ReduceAction165
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction182
+private class ReduceAction166
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction183
+private class ReduceAction167
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction184
+private class ReduceAction168
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction185
+private class ReduceAction169
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction186
+private class ReduceAction170
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction193
+private class ReduceAction177
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction194
+private class ReduceAction178
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction195
+private class ReduceAction179
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction196
+private class ReduceAction180
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction197
+private class ReduceAction181
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction198
+private class ReduceAction182
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction199
+private class ReduceAction183
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction201
+private class ReduceAction185
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction202
+private class ReduceAction186
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction204
+private class ReduceAction188
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction205
+private class ReduceAction189
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction206
+private class ReduceAction190
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction207
+private class ReduceAction191
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction208
+private class ReduceAction192
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction209
+private class ReduceAction193
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction210
+private class ReduceAction194
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction211
+private class ReduceAction195
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction212
+private class ReduceAction196
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction213
+private class ReduceAction197
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction214
+private class ReduceAction198
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction215
+private class ReduceAction199
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction216
+private class ReduceAction200
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction217
+private class ReduceAction201
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction218
+private class ReduceAction202
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction219
+private class ReduceAction203
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction220
+private class ReduceAction204
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction221
+private class ReduceAction205
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction222
+private class ReduceAction206
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction223
+private class ReduceAction207
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction224
+private class ReduceAction208
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction225
+private class ReduceAction209
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction226
+private class ReduceAction210
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction227
+private class ReduceAction211
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction228
+private class ReduceAction212
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction229
+private class ReduceAction213
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction232
+private class ReduceAction216
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction233
+private class ReduceAction217
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction234
+private class ReduceAction218
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction235
+private class ReduceAction219
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction236
+private class ReduceAction220
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction237
+private class ReduceAction221
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction238
+private class ReduceAction222
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction239
+private class ReduceAction223
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction240
+private class ReduceAction224
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction241
+private class ReduceAction225
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction242
+private class ReduceAction226
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction243
+private class ReduceAction227
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction244
+private class ReduceAction228
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction247
+private class ReduceAction231
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction249
+private class ReduceAction233
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction250
+private class ReduceAction234
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction251
+private class ReduceAction235
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction252
+private class ReduceAction236
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction254
+private class ReduceAction238
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction256
+private class ReduceAction240
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction257
+private class ReduceAction241
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction258
+private class ReduceAction242
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction259
+private class ReduceAction243
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction260
+private class ReduceAction244
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction261
+private class ReduceAction245
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction262
+private class ReduceAction246
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction263
+private class ReduceAction247
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction264
+private class ReduceAction248
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction265
+private class ReduceAction249
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction267
+private class ReduceAction251
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction268
+private class ReduceAction252
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction270
+private class ReduceAction254
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction271
+private class ReduceAction255
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction272
+private class ReduceAction256
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction274
+private class ReduceAction258
+ super ReduceAction
+ redef fun action(p: Parser)
+ do
+ var node_list: nullable Object = null
+ var nodearraylist4 = p.pop
+ var nodearraylist3 = p.pop
+ var nodearraylist2 = p.pop
+ var nodearraylist1 = p.pop
+ var pexprnode2 = nodearraylist1
+ assert pexprnode2 isa nullable AExpr
+ var pexprnode3 = nodearraylist4
+ assert pexprnode3 isa nullable AExpr
+ var pexprnode1: nullable AStarstarExpr = new AStarstarExpr.init_astarstarexpr(
+ pexprnode2,
+ pexprnode3
+ )
+ node_list = pexprnode1
+ p.push(p.go_to(_goto), node_list)
+ end
+end
+private class ReduceAction260
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction275
+private class ReduceAction261
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction277
+private class ReduceAction263
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction278
+private class ReduceAction264
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction279
+private class ReduceAction265
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction280
+private class ReduceAction267
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction281
+private class ReduceAction268
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction287
+private class ReduceAction274
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction288
+private class ReduceAction275
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction289
+private class ReduceAction276
super ReduceAction
redef fun action(p: Parser)
do
var nodearraylist3 = p.pop
var nodearraylist2 = p.pop
var nodearraylist1 = p.pop
- var tobranode2 = nodearraylist1
- assert tobranode2 isa nullable TObra
- var pexprnode3 = nodearraylist3
- assert pexprnode3 isa nullable AExpr
- var pexprnode4 = nodearraylist7
- assert pexprnode4 isa nullable AExpr
- var tcbranode5 = nodearraylist9
- assert tcbranode5 isa nullable TCbra
- var pannotationsnode6 = nodearraylist10
- assert pannotationsnode6 isa nullable AAnnotations
- var pexprnode1: nullable ACrangeExpr = new ACrangeExpr.init_acrangeexpr(
- tobranode2,
- pexprnode3,
- pexprnode4,
- tcbranode5,
- pannotationsnode6
+ var pexprnode2 = nodearraylist1
+ assert pexprnode2 isa nullable AExpr
+ var tkwasnode3 = nodearraylist4
+ assert tkwasnode3 isa nullable TKwas
+ var toparnode4 = nodearraylist6
+ assert toparnode4 isa nullable TOpar
+ var ptypenode5 = nodearraylist8
+ assert ptypenode5 isa nullable AType
+ var tcparnode6 = nodearraylist10
+ assert tcparnode6 isa nullable TCpar
+ var pexprnode1: nullable AAsCastExpr = new AAsCastExpr.init_aascastexpr(
+ pexprnode2,
+ tkwasnode3,
+ toparnode4,
+ ptypenode5,
+ tcparnode6
)
node_list = pexprnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction290
+private class ReduceAction277
super ReduceAction
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist12 = p.pop
+ var nodearraylist11 = p.pop
var nodearraylist10 = p.pop
var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist3 = p.pop
var nodearraylist2 = p.pop
var nodearraylist1 = p.pop
- var tobranode2 = nodearraylist1
- assert tobranode2 isa nullable TObra
- var pexprnode3 = nodearraylist3
- assert pexprnode3 isa nullable AExpr
- var pexprnode4 = nodearraylist7
- assert pexprnode4 isa nullable AExpr
- var tobranode5 = nodearraylist9
- assert tobranode5 isa nullable TObra
- var pannotationsnode6 = nodearraylist10
- assert pannotationsnode6 isa nullable AAnnotations
- var pexprnode1: nullable AOrangeExpr = new AOrangeExpr.init_aorangeexpr(
- tobranode2,
- pexprnode3,
- pexprnode4,
- tobranode5,
- pannotationsnode6
+ var pexprnode2 = nodearraylist1
+ assert pexprnode2 isa nullable AExpr
+ var tkwasnode3 = nodearraylist4
+ assert tkwasnode3 isa nullable TKwas
+ var toparnode4 = nodearraylist6
+ assert toparnode4 isa nullable TOpar
+ var tkwnotnode5 = nodearraylist8
+ assert tkwnotnode5 isa nullable TKwnot
+ var tkwnullnode6 = nodearraylist10
+ assert tkwnullnode6 isa nullable TKwnull
+ var tcparnode7 = nodearraylist12
+ assert tcparnode7 isa nullable TCpar
+ var pexprnode1: nullable AAsNotnullExpr = new AAsNotnullExpr.init_aasnotnullexpr(
+ pexprnode2,
+ tkwasnode3,
+ toparnode4,
+ tkwnotnode5,
+ tkwnullnode6,
+ tcparnode7
)
node_list = pexprnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction291
+private class ReduceAction278
super ReduceAction
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist8 = p.pop
+ var nodearraylist7 = p.pop
+ var nodearraylist6 = p.pop
+ var nodearraylist5 = p.pop
+ var nodearraylist4 = p.pop
+ var nodearraylist3 = p.pop
var nodearraylist2 = p.pop
var nodearraylist1 = p.pop
- var pexprsnode2 = nodearraylist1
- assert pexprsnode2 isa nullable AExprs
- var pannotationsnode3 = nodearraylist2
- assert pannotationsnode3 isa nullable AAnnotations
- var pexprnode1: nullable AArrayExpr = new AArrayExpr.init_aarrayexpr(
- pexprsnode2,
- pannotationsnode3
+ var pexprnode2 = nodearraylist1
+ assert pexprnode2 isa nullable AExpr
+ var tkwasnode3 = nodearraylist4
+ assert tkwasnode3 isa nullable TKwas
+ var tkwnotnode5 = nodearraylist6
+ assert tkwnotnode5 isa nullable TKwnot
+ var tkwnullnode6 = nodearraylist8
+ assert tkwnullnode6 isa nullable TKwnull
+ var pexprnode1: nullable AAsNotnullExpr = new AAsNotnullExpr.init_aasnotnullexpr(
+ pexprnode2,
+ tkwasnode3,
+ null,
+ tkwnotnode5,
+ tkwnullnode6,
+ null
)
node_list = pexprnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction292
+private class ReduceAction279
+ super ReduceAction
+ redef fun action(p: Parser)
+ do
+ var node_list: nullable Object = null
+ var nodearraylist2 = p.pop
+ var nodearraylist1 = p.pop
+ var pexprnode2 = nodearraylist1
+ assert pexprnode2 isa nullable AExpr
+ var tdotdotdotnode3 = nodearraylist2
+ assert tdotdotdotnode3 isa nullable TDotdotdot
+ var pexprnode1: nullable AVarargExpr = new AVarargExpr.init_avarargexpr(
+ pexprnode2,
+ tdotdotdotnode3
+ )
+ node_list = pexprnode1
+ p.push(p.go_to(_goto), node_list)
+ end
+end
+private class ReduceAction280
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction293
+private class ReduceAction281
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction294
+private class ReduceAction282
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction295
+private class ReduceAction283
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction296
+private class ReduceAction284
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction297
+private class ReduceAction285
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction298
+private class ReduceAction286
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction299
+private class ReduceAction287
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction300
+private class ReduceAction288
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction302
+private class ReduceAction290
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction303
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist10 = p.pop
- var nodearraylist9 = p.pop
- var nodearraylist8 = p.pop
- var nodearraylist7 = p.pop
- var nodearraylist6 = p.pop
- var nodearraylist5 = p.pop
- var nodearraylist4 = p.pop
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pexprnode2 = nodearraylist1
- assert pexprnode2 isa nullable AExpr
- var tkwasnode3 = nodearraylist4
- assert tkwasnode3 isa nullable TKwas
- var toparnode4 = nodearraylist6
- assert toparnode4 isa nullable TOpar
- var ptypenode5 = nodearraylist8
- assert ptypenode5 isa nullable AType
- var tcparnode6 = nodearraylist10
- assert tcparnode6 isa nullable TCpar
- var pexprnode1: nullable AAsCastExpr = new AAsCastExpr.init_aascastexpr(
- pexprnode2,
- tkwasnode3,
- toparnode4,
- ptypenode5,
- tcparnode6
- )
- node_list = pexprnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction304
+private class ReduceAction291
super ReduceAction
redef fun action(p: Parser)
do
var node_list: nullable Object = null
- var nodearraylist12 = p.pop
- var nodearraylist11 = p.pop
var nodearraylist10 = p.pop
var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist3 = p.pop
var nodearraylist2 = p.pop
var nodearraylist1 = p.pop
- var pexprnode2 = nodearraylist1
- assert pexprnode2 isa nullable AExpr
- var tkwasnode3 = nodearraylist4
- assert tkwasnode3 isa nullable TKwas
- var toparnode4 = nodearraylist6
- assert toparnode4 isa nullable TOpar
- var tkwnotnode5 = nodearraylist8
- assert tkwnotnode5 isa nullable TKwnot
- var tkwnullnode6 = nodearraylist10
- assert tkwnullnode6 isa nullable TKwnull
- var tcparnode7 = nodearraylist12
- assert tcparnode7 isa nullable TCpar
- var pexprnode1: nullable AAsNotnullExpr = new AAsNotnullExpr.init_aasnotnullexpr(
- pexprnode2,
- tkwasnode3,
- toparnode4,
- tkwnotnode5,
- tkwnullnode6,
- tcparnode7
+ var tobranode2 = nodearraylist1
+ assert tobranode2 isa nullable TObra
+ var pexprnode3 = nodearraylist3
+ assert pexprnode3 isa nullable AExpr
+ var pexprnode4 = nodearraylist7
+ assert pexprnode4 isa nullable AExpr
+ var tcbranode5 = nodearraylist9
+ assert tcbranode5 isa nullable TCbra
+ var pannotationsnode6 = nodearraylist10
+ assert pannotationsnode6 isa nullable AAnnotations
+ var pexprnode1: nullable ACrangeExpr = new ACrangeExpr.init_acrangeexpr(
+ tobranode2,
+ pexprnode3,
+ pexprnode4,
+ tcbranode5,
+ pannotationsnode6
)
node_list = pexprnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction305
+private class ReduceAction292
super ReduceAction
redef fun action(p: Parser)
do
var node_list: nullable Object = null
+ var nodearraylist10 = p.pop
+ var nodearraylist9 = p.pop
var nodearraylist8 = p.pop
var nodearraylist7 = p.pop
var nodearraylist6 = p.pop
var nodearraylist3 = p.pop
var nodearraylist2 = p.pop
var nodearraylist1 = p.pop
- var pexprnode2 = nodearraylist1
- assert pexprnode2 isa nullable AExpr
- var tkwasnode3 = nodearraylist4
- assert tkwasnode3 isa nullable TKwas
- var tkwnotnode5 = nodearraylist6
- assert tkwnotnode5 isa nullable TKwnot
- var tkwnullnode6 = nodearraylist8
- assert tkwnullnode6 isa nullable TKwnull
- var pexprnode1: nullable AAsNotnullExpr = new AAsNotnullExpr.init_aasnotnullexpr(
- pexprnode2,
- tkwasnode3,
- null,
- tkwnotnode5,
- tkwnullnode6,
- null
+ var tobranode2 = nodearraylist1
+ assert tobranode2 isa nullable TObra
+ var pexprnode3 = nodearraylist3
+ assert pexprnode3 isa nullable AExpr
+ var pexprnode4 = nodearraylist7
+ assert pexprnode4 isa nullable AExpr
+ var tobranode5 = nodearraylist9
+ assert tobranode5 isa nullable TObra
+ var pannotationsnode6 = nodearraylist10
+ assert pannotationsnode6 isa nullable AAnnotations
+ var pexprnode1: nullable AOrangeExpr = new AOrangeExpr.init_aorangeexpr(
+ tobranode2,
+ pexprnode3,
+ pexprnode4,
+ tobranode5,
+ pannotationsnode6
)
node_list = pexprnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction306
+private class ReduceAction293
super ReduceAction
redef fun action(p: Parser)
do
var node_list: nullable Object = null
var nodearraylist2 = p.pop
var nodearraylist1 = p.pop
- var pexprnode2 = nodearraylist1
- assert pexprnode2 isa nullable AExpr
- var tdotdotdotnode3 = nodearraylist2
- assert tdotdotdotnode3 isa nullable TDotdotdot
- var pexprnode1: nullable AVarargExpr = new AVarargExpr.init_avarargexpr(
- pexprnode2,
- tdotdotdotnode3
+ var pexprsnode2 = nodearraylist1
+ assert pexprsnode2 isa nullable AExprs
+ var pannotationsnode3 = nodearraylist2
+ assert pannotationsnode3 isa nullable AAnnotations
+ var pexprnode1: nullable AArrayExpr = new AArrayExpr.init_aarrayexpr(
+ pexprsnode2,
+ pannotationsnode3
)
node_list = pexprnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction307
+private class ReduceAction294
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction308
+private class ReduceAction295
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction309
+private class ReduceAction296
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction310
+private class ReduceAction297
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction311
+private class ReduceAction298
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction314
+private class ReduceAction301
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction315
+private class ReduceAction302
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction316
+private class ReduceAction303
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction317
+private class ReduceAction304
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction318
+private class ReduceAction305
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction320
+private class ReduceAction307
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction321
+private class ReduceAction308
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction322
+private class ReduceAction309
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction323
+private class ReduceAction310
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction324
+private class ReduceAction311
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction326
+private class ReduceAction314
+ super ReduceAction
+ redef fun action(p: Parser)
+ do
+ var node_list: nullable Object = null
+ var nodearraylist4 = p.pop
+ var nodearraylist3 = p.pop
+ var nodearraylist2 = p.pop
+ var nodearraylist1 = p.pop
+ var listnode8 = new Array[Object]
+ var tkwredefnode3 = nodearraylist1
+ assert tkwredefnode3 isa nullable TKwredef
+ var pvisibilitynode4 = nodearraylist2
+ assert pvisibilitynode4 isa nullable AVisibility
+ var patidnode5 = nodearraylist3
+ assert patidnode5 isa nullable AAtid
+ var patargnode7 = nodearraylist4
+ assert patargnode7 isa nullable AAtArg
+ if patargnode7 != null then
+ listnode8.add(patargnode7)
+ end
+ var pannotationnode1: nullable AAnnotation = new AAnnotation.init_aannotation(
+ null,
+ tkwredefnode3,
+ pvisibilitynode4,
+ patidnode5,
+ null,
+ listnode8,
+ null,
+ null
+ )
+ node_list = pannotationnode1
+ p.push(p.go_to(_goto), node_list)
+ end
+end
+private class ReduceAction315
+ super ReduceAction
+ redef fun action(p: Parser)
+ do
+ var node_list: nullable Object = null
+ var nodearraylist1 = p.pop
+ var pexprnode2 = nodearraylist1
+ assert pexprnode2 isa nullable AExpr
+ var patargnode1: nullable AExprAtArg = new AExprAtArg.init_aexpratarg(
+ pexprnode2
+ )
+ node_list = patargnode1
+ p.push(p.go_to(_goto), node_list)
+ end
+end
+private class ReduceAction316
+ super ReduceAction
+ redef fun action(p: Parser)
+ do
+ var node_list: nullable Object = null
+ var nodearraylist3 = p.pop
+ var nodearraylist2 = p.pop
+ var nodearraylist1 = p.pop
+ var pannotationnode1 = nodearraylist3
+ node_list = pannotationnode1
+ p.push(p.go_to(_goto), node_list)
+ end
+end
+private class ReduceAction318
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction327
+private class ReduceAction319
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction328
+private class ReduceAction320
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction329
+private class ReduceAction321
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction330
+private class ReduceAction322
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction331
+private class ReduceAction323
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction332
+private class ReduceAction324
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction333
+private class ReduceAction325
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction334
+private class ReduceAction326
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction335
+private class ReduceAction327
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction336
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist3 = p.pop
- var nodearraylist2 = p.pop
- var nodearraylist1 = p.pop
- var pannotationnode1 = nodearraylist3
- node_list = pannotationnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction337
+private class ReduceAction328
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction338
+private class ReduceAction329
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction339
+private class ReduceAction330
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction340
+private class ReduceAction331
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction341
- super ReduceAction
- redef fun action(p: Parser)
- do
- var node_list: nullable Object = null
- var nodearraylist1 = p.pop
- var pexprnode2 = nodearraylist1
- assert pexprnode2 isa nullable AExpr
- var patargnode1: nullable AExprAtArg = new AExprAtArg.init_aexpratarg(
- pexprnode2
- )
- node_list = patargnode1
- p.push(p.go_to(_goto), node_list)
- end
-end
-private class ReduceAction343
+private class ReduceAction334
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction344
+private class ReduceAction335
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction345
+private class ReduceAction336
super ReduceAction
redef fun action(p: Parser)
do
var node_list: nullable Object = null
var nodearraylist1 = p.pop
- var tkwreadablenode2 = nodearraylist1
- assert tkwreadablenode2 isa nullable TKwreadable
- var patidnode1: nullable AKwreadableAtid = new AKwreadableAtid.init_akwreadableatid(
- tkwreadablenode2
+ var tkwexternnode2 = nodearraylist1
+ assert tkwexternnode2 isa nullable TKwextern
+ var patidnode1: nullable AKwexternAtid = new AKwexternAtid.init_akwexternatid(
+ tkwexternnode2
)
node_list = patidnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction346
+private class ReduceAction337
super ReduceAction
redef fun action(p: Parser)
do
var node_list: nullable Object = null
var nodearraylist1 = p.pop
- var tkwwritablenode2 = nodearraylist1
- assert tkwwritablenode2 isa nullable TKwwritable
- var patidnode1: nullable AKwwritableAtid = new AKwwritableAtid.init_akwwritableatid(
- tkwwritablenode2
+ var tkwabstractnode2 = nodearraylist1
+ assert tkwabstractnode2 isa nullable TKwabstract
+ var patidnode1: nullable AKwabstractAtid = new AKwabstractAtid.init_akwabstractatid(
+ tkwabstractnode2
)
node_list = patidnode1
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction347
+private class ReduceAction338
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction348
+private class ReduceAction339
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction349
+private class ReduceAction340
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction351
+private class ReduceAction342
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction354
+private class ReduceAction345
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction356
+private class ReduceAction347
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction357
+private class ReduceAction348
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction358
+private class ReduceAction349
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction359
+private class ReduceAction350
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction360
+private class ReduceAction351
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction361
+private class ReduceAction352
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction362
+private class ReduceAction353
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction363
+private class ReduceAction354
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction364
+private class ReduceAction355
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction365
+private class ReduceAction356
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction366
+private class ReduceAction357
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction368
+private class ReduceAction359
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction369
+private class ReduceAction360
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction370
+private class ReduceAction361
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction372
+private class ReduceAction363
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction373
+private class ReduceAction364
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction374
+private class ReduceAction365
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction376
+private class ReduceAction367
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction377
+private class ReduceAction368
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction379
+private class ReduceAction370
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction380
+private class ReduceAction371
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction382
+private class ReduceAction373
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction383
+private class ReduceAction374
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction386
+private class ReduceAction377
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction387
+private class ReduceAction378
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction388
+private class ReduceAction379
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction604
+private class ReduceAction602
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction605
+private class ReduceAction604
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction606
+private class ReduceAction605
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction608
+private class ReduceAction607
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction624
+private class ReduceAction623
super ReduceAction
redef fun action(p: Parser)
do
p.push(p.go_to(_goto), node_list)
end
end
-private class ReduceAction625
+private class ReduceAction624
super ReduceAction
redef fun action(p: Parser)
do
class TKwdo
super Token
end
-class TKwreadable
- super Token
-end
-class TKwwritable
- super Token
-end
class TKwvar
super Token
end
-class TKwintern
- super Token
-end
class TKwextern
super Token
end
class TStar
super Token
end
+class TStarstar
+ super Token
+end
class TSlash
super Token
end
class AFormaldef super Prod end
class ASuperclass super Prod end
class APropdef super Prod end
-class AAble super Prod end
class AMethid super Prod end
class ASignature super Prod end
class AParam super Prod end
class AAttrPropdef
super APropdef
var n_doc: nullable ADoc = null is writable
- var n_readable: nullable AAble = null is writable
- var n_writable: nullable AAble = null is writable
var n_kwredef: nullable TKwredef = null is writable
var n_visibility: AVisibility is writable, noinit
var n_kwvar: TKwvar is writable, noinit
- var n_id: nullable TAttrid = null is writable
- var n_id2: nullable TId = null is writable
+ var n_id2: TId is writable, noinit
var n_type: nullable AType = null is writable
- var n_annotations: nullable AAnnotations = null is writable
var n_expr: nullable AExpr = null is writable
-end
-class AMethPropdef
- super APropdef
- var n_doc: nullable ADoc = null is writable
- var n_kwredef: nullable TKwredef = null is writable
- var n_visibility: AVisibility is writable, noinit
- var n_methid: AMethid is writable, noinit
- var n_signature: ASignature is writable, noinit
-end
-class ADeferredMethPropdef
- super APropdef
- var n_doc: nullable ADoc = null is writable
- var n_kwredef: nullable TKwredef = null is writable
- var n_visibility: AVisibility is writable, noinit
- var n_kwmeth: TKwmeth is writable, noinit
- var n_methid: AMethid is writable, noinit
- var n_signature: ASignature is writable, noinit
- var n_annotations: nullable AAnnotations = null is writable
-end
-class AInternMethPropdef
- super APropdef
- var n_doc: nullable ADoc = null is writable
- var n_kwredef: nullable TKwredef = null is writable
- var n_visibility: AVisibility is writable, noinit
- var n_kwmeth: TKwmeth is writable, noinit
- var n_methid: AMethid is writable, noinit
- var n_signature: ASignature is writable, noinit
-end
-class AInternNewPropdef
- super APropdef
- var n_doc: nullable ADoc = null is writable
- var n_kwredef: nullable TKwredef = null is writable
- var n_visibility: AVisibility is writable, noinit
- var n_kwnew: TKwnew is writable, noinit
- var n_methid: nullable AMethid = null is writable
- var n_signature: ASignature is writable, noinit
-end
-class AExternMethPropdef
- super APropdef
- var n_doc: nullable ADoc = null is writable
- var n_kwredef: nullable TKwredef = null is writable
- var n_visibility: AVisibility is writable, noinit
- var n_kwmeth: TKwmeth is writable, noinit
- var n_methid: AMethid is writable, noinit
- var n_signature: ASignature is writable, noinit
var n_annotations: nullable AAnnotations = null is writable
- var n_extern: nullable TString = null is writable
- var n_extern_calls: nullable AExternCalls = null is writable
- var n_extern_code_block: nullable AExternCodeBlock = null is writable
end
-class AConcreteMethPropdef
+class AMainMethPropdef
super APropdef
- var n_doc: nullable ADoc = null is writable
var n_kwredef: nullable TKwredef = null is writable
- var n_visibility: AVisibility is writable, noinit
- var n_kwmeth: TKwmeth is writable, noinit
- var n_methid: AMethid is writable, noinit
- var n_signature: ASignature is writable, noinit
- var n_annotations: nullable AAnnotations = null is writable
var n_block: nullable AExpr = null is writable
end
-class AConcreteInitPropdef
+class ATypePropdef
super APropdef
var n_doc: nullable ADoc = null is writable
var n_kwredef: nullable TKwredef = null is writable
var n_visibility: AVisibility is writable, noinit
- var n_kwinit: TKwinit is writable, noinit
- var n_methid: nullable AMethid = null is writable
- var n_signature: ASignature is writable, noinit
+ var n_kwtype: TKwtype is writable, noinit
+ var n_id: TClassid is writable, noinit
+ var n_type: AType is writable, noinit
var n_annotations: nullable AAnnotations = null is writable
- var n_block: nullable AExpr = null is writable
end
-class AExternInitPropdef
+class AMethPropdef
super APropdef
var n_doc: nullable ADoc = null is writable
var n_kwredef: nullable TKwredef = null is writable
var n_visibility: AVisibility is writable, noinit
- var n_kwnew: TKwnew is writable, noinit
+ var n_kwmeth: nullable TKwmeth = null is writable
+ var n_kwinit: nullable TKwinit = null is writable
+ var n_kwnew: nullable TKwnew = null is writable
var n_methid: nullable AMethid = null is writable
var n_signature: ASignature is writable, noinit
var n_annotations: nullable AAnnotations = null is writable
- var n_extern: nullable TString = null is writable
var n_extern_calls: nullable AExternCalls = null is writable
var n_extern_code_block: nullable AExternCodeBlock = null is writable
-end
-class AMainMethPropdef
- super APropdef
- var n_kwredef: nullable TKwredef = null is writable
var n_block: nullable AExpr = null is writable
end
-class ATypePropdef
- super APropdef
- var n_doc: nullable ADoc = null is writable
- var n_kwredef: nullable TKwredef = null is writable
- var n_visibility: AVisibility is writable, noinit
- var n_kwtype: TKwtype is writable, noinit
- var n_id: TClassid is writable, noinit
- var n_type: AType is writable, noinit
- var n_annotations: nullable AAnnotations = null is writable
-end
-class AReadAble
- super AAble
- var n_kwredef: nullable TKwredef = null is writable
- var n_kwreadable: TKwreadable is writable, noinit
-end
-class AWriteAble
- super AAble
- var n_kwredef: nullable TKwredef = null is writable
- var n_visibility: nullable AVisibility = null is writable
- var n_kwwritable: TKwwritable is writable, noinit
-end
class AIdMethid
super AMethid
var n_id: TId is writable, noinit
super AMethid
var n_star: TStar is writable, noinit
end
+class AStarstarMethid
+ super AMethid
+ var n_starstar: TStarstar is writable, noinit
+end
class ASlashMethid
super AMethid
var n_slash: TSlash is writable, noinit
var n_expr: AExpr is writable, noinit
var n_expr2: AExpr is writable, noinit
end
+class AStarstarExpr
+ super AExpr
+ var n_expr: AExpr is writable, noinit
+ var n_expr2: AExpr is writable, noinit
+end
class ASlashExpr
super AExpr
var n_expr: AExpr is writable, noinit
super AAtid
var n_id: TKwextern is writable, noinit
end
-class AKwinternAtid
- super AAtid
- var n_id: TKwintern is writable, noinit
-end
-class AKwreadableAtid
- super AAtid
- var n_id: TKwreadable is writable, noinit
-end
-class AKwwritableAtid
+class AKwabstractAtid
super AAtid
- var n_id: TKwwritable is writable, noinit
+ var n_id: TKwabstract is writable, noinit
end
class AKwimportAtid
super AAtid
class TKwdo
super TokenKeyword
end
-class TKwreadable
- super TokenKeyword
-end
-class TKwwritable
- super TokenKeyword
-end
class TKwvar
super TokenKeyword
end
-class TKwintern
- super TokenKeyword
-end
class TKwextern
super TokenKeyword
end
class TStar
super TokenOperator
end
+class TStarstar
+ super TokenOperator
+end
class TSlash
super TokenOperator
end
super APropdef
var n_kwvar: TKwvar is writable, noinit
- # The identifier for an old-style attribute (null if new-style)
- var n_id: nullable TAttrid is writable
-
# The identifier for a new-style attribute (null if old-style)
- var n_id2: nullable TId is writable
+ var n_id2: TId is writable, noinit
var n_type: nullable AType = null is writable
- var n_readable: nullable AAble = null is writable
- var n_writable: nullable AAble = null is writable
# The initial value, if any
var n_expr: nullable AExpr = null is writable
redef fun hot_location
do
- if n_id != null then return n_id.location else return n_id2.location
+ return n_id2.location
end
end
# A definition of all kind of method (including constructors)
-abstract class AMethPropdef
+class AMethPropdef
super APropdef
var n_kwmeth: nullable TKwmeth = null is writable
var n_kwinit: nullable TKwinit = null is writable
var n_methid: nullable AMethid = null is writable
var n_signature: nullable ASignature = null is writable
var n_block: nullable AExpr = null is writable
- var n_extern: nullable TString = null is writable
var n_extern_calls: nullable AExternCalls = null is writable
var n_extern_code_block: nullable AExternCodeBlock = null is writable
redef fun hot_location
end
end
-# A method marked abstract
-# *deferred* is a old synonynmous of *abstract* that comes from PRM, that comes from Eiffel.
-class ADeferredMethPropdef
- super AMethPropdef
-end
-
-# A method marked intern
-class AInternMethPropdef
- super AMethPropdef
-end
-
-# A method of a constructor marked extern
-abstract class AExternPropdef
- super AMethPropdef
-end
-
-# A method marked extern
-class AExternMethPropdef
- super AExternPropdef
-end
-
-# A method with a body
-class AConcreteMethPropdef
- super AMethPropdef
-end
-
-# A constructor
-abstract class AInitPropdef
- super AMethPropdef
-end
-
-# A constructor with a body
-class AConcreteInitPropdef
- super AConcreteMethPropdef
- super AInitPropdef
-end
-
-class AInternNewPropdef
- super AInternMethPropdef
- super AInitPropdef
-end
-
-# A constructor marked extern (defined with the `new` keyword)
-class AExternInitPropdef
- super AExternPropdef
- super AInitPropdef
-end
-
# The implicit main method
class AMainMethPropdef
- super AConcreteMethPropdef
+ super AMethPropdef
end
# Declaration of callbacks for extern methods
var n_type: AType is writable, noinit
end
-# A `writable` or `readable` modifier
-abstract class AAble
- super Prod
- var n_visibility: nullable AVisibility = null is writable
- var n_kwredef: nullable TKwredef = null is writable
-end
-
-# A `readable` modifier
-class AReadAble
- super AAble
- var n_kwreadable: TKwreadable is writable, noinit
-end
-
-# A `writable` modifier
-class AWriteAble
- super AAble
- var n_kwwritable: TKwwritable is writable, noinit
-end
-
# The identifier of a method in a method declaration.
# There is a specific class because of operator and setters.
abstract class AMethid
super AMethid
var n_star: TStar is writable, noinit
end
+class AStarstarMethid
+ super AMethid
+ var n_starstar: TStarstar is writable, noinit
+end
class ASlashMethid
super AMethid
var n_slash: TSlash is writable, noinit
super ABinopExpr
end
+# A `**` expression
+class AStarstarExpr
+ super ABinopExpr
+end
+
# A `/` expression
class ASlashExpr
super ABinopExpr
class AKwexternAtid
super AAtid
end
-class AKwinternAtid
- super AAtid
-end
-class AKwreadableAtid
- super AAtid
-end
-class AKwwritableAtid
+class AKwimportAtid
super AAtid
end
-class AKwimportAtid
+class AKwabstractAtid
super AAtid
end
redef class AAttrPropdef
init init_aattrpropdef (
n_doc: nullable ADoc,
- n_readable: nullable AAble,
- n_writable: nullable AAble,
n_kwredef: nullable TKwredef,
n_visibility: nullable AVisibility,
n_kwvar: nullable TKwvar,
- n_id: nullable TAttrid,
n_id2: nullable TId,
n_type: nullable AType,
- n_annotations: nullable AAnnotations,
- n_expr: nullable AExpr
+ n_expr: nullable AExpr,
+ n_annotations: nullable AAnnotations
)
do
_n_doc = n_doc
if n_doc != null then n_doc.parent = self
- _n_readable = n_readable
- if n_readable != null then n_readable.parent = self
- _n_writable = n_writable
- if n_writable != null then n_writable.parent = self
_n_kwredef = n_kwredef
if n_kwredef != null then n_kwredef.parent = self
_n_visibility = n_visibility.as(not null)
n_visibility.parent = self
_n_kwvar = n_kwvar.as(not null)
n_kwvar.parent = self
- _n_id = n_id
- if n_id != null then n_id.parent = self
- _n_id2 = n_id2
- if n_id2 != null then n_id2.parent = self
+ _n_id2 = n_id2.as(not null)
+ n_id2.parent = self
_n_type = n_type
if n_type != null then n_type.parent = self
- _n_annotations = n_annotations
- if n_annotations != null then n_annotations.parent = self
_n_expr = n_expr
if n_expr != null then n_expr.parent = self
+ _n_annotations = n_annotations
+ if n_annotations != null then n_annotations.parent = self
end
redef fun replace_child(old_child: ANode, new_child: nullable ANode)
n_doc = new_child.as(nullable ADoc)
return
end
- if _n_readable == old_child then
- n_readable = new_child.as(nullable AAble)
- return
- end
- if _n_writable == old_child then
- n_writable = new_child.as(nullable AAble)
- return
- end
if _n_kwredef == old_child then
n_kwredef = new_child.as(nullable TKwredef)
return
n_kwvar = new_child.as(TKwvar)
return
end
- if _n_id == old_child then
- n_id = new_child.as(nullable TAttrid)
- return
- end
if _n_id2 == old_child then
- n_id2 = new_child.as(nullable TId)
+ n_id2 = new_child.as(TId)
return
end
if _n_type == old_child then
n_type = new_child.as(nullable AType)
return
end
- if _n_annotations == old_child then
- n_annotations = new_child.as(nullable AAnnotations)
- return
- end
if _n_expr == old_child then
n_expr = new_child.as(nullable AExpr)
return
end
+ if _n_annotations == old_child then
+ n_annotations = new_child.as(nullable AAnnotations)
+ return
+ end
end
redef fun n_doc=(node)
_n_doc = node
if node != null then node.parent = self
end
- redef fun n_readable=(node)
- do
- _n_readable = node
- if node != null then node.parent = self
- end
- redef fun n_writable=(node)
- do
- _n_writable = node
- if node != null then node.parent = self
- end
redef fun n_kwredef=(node)
do
_n_kwredef = node
_n_kwvar = node
node.parent = self
end
- redef fun n_id=(node)
- do
- _n_id = node
- if node != null then node.parent = self
- end
redef fun n_id2=(node)
do
_n_id2 = node
- if node != null then node.parent = self
+ node.parent = self
end
redef fun n_type=(node)
do
_n_type = node
if node != null then node.parent = self
end
- redef fun n_annotations=(node)
- do
- _n_annotations = node
- if node != null then node.parent = self
- end
redef fun n_expr=(node)
do
_n_expr = node
if node != null then node.parent = self
end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_doc)
- v.enter_visit(_n_readable)
- v.enter_visit(_n_writable)
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwvar)
- v.enter_visit(_n_id)
- v.enter_visit(_n_id2)
- v.enter_visit(_n_type)
- v.enter_visit(_n_annotations)
- v.enter_visit(_n_expr)
- end
-end
-redef class AMethPropdef
- init init_amethpropdef (
- n_doc: nullable ADoc,
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_methid: nullable AMethid,
- n_signature: nullable ASignature
- )
- do
- _n_doc = n_doc
- if n_doc != null then n_doc.parent = self
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility.as(not null)
- n_visibility.parent = self
- _n_methid = n_methid.as(not null)
- n_methid.parent = self
- _n_signature = n_signature.as(not null)
- n_signature.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_doc == old_child then
- n_doc = new_child.as(nullable ADoc)
- return
- end
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(AVisibility)
- return
- end
- if _n_methid == old_child then
- n_methid = new_child.as(AMethid)
- return
- end
- if _n_signature == old_child then
- n_signature = new_child.as(ASignature)
- return
- end
- end
-
- redef fun n_doc=(node)
- do
- _n_doc = node
- if node != null then node.parent = self
- end
- redef fun n_kwredef=(node)
- do
- _n_kwredef = node
- if node != null then node.parent = self
- end
- redef fun n_visibility=(node)
- do
- _n_visibility = node
- node.parent = self
- end
- redef fun n_methid=(node)
- do
- _n_methid = node
- node.parent = self
- end
- redef fun n_signature=(node)
- do
- _n_signature = node
- node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_doc)
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_visibility)
- v.enter_visit(_n_methid)
- v.enter_visit(_n_signature)
- end
-end
-redef class ADeferredMethPropdef
- init init_adeferredmethpropdef (
- n_doc: nullable ADoc,
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_kwmeth: nullable TKwmeth,
- n_methid: nullable AMethid,
- n_signature: nullable ASignature,
- n_annotations: nullable AAnnotations
- )
- do
- _n_doc = n_doc
- if n_doc != null then n_doc.parent = self
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility.as(not null)
- n_visibility.parent = self
- _n_kwmeth = n_kwmeth.as(not null)
- n_kwmeth.parent = self
- _n_methid = n_methid.as(not null)
- n_methid.parent = self
- _n_signature = n_signature.as(not null)
- n_signature.parent = self
- _n_annotations = n_annotations
- if n_annotations != null then n_annotations.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_doc == old_child then
- n_doc = new_child.as(nullable ADoc)
- return
- end
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(AVisibility)
- return
- end
- if _n_kwmeth == old_child then
- n_kwmeth = new_child.as(TKwmeth)
- return
- end
- if _n_methid == old_child then
- n_methid = new_child.as(AMethid)
- return
- end
- if _n_signature == old_child then
- n_signature = new_child.as(ASignature)
- return
- end
- if _n_annotations == old_child then
- n_annotations = new_child.as(nullable AAnnotations)
- return
- end
- end
-
- redef fun n_doc=(node)
- do
- _n_doc = node
- if node != null then node.parent = self
- end
- redef fun n_kwredef=(node)
- do
- _n_kwredef = node
- if node != null then node.parent = self
- end
- redef fun n_visibility=(node)
- do
- _n_visibility = node
- node.parent = self
- end
- redef fun n_kwmeth=(node)
- do
- _n_kwmeth = node
- node.parent = self
- end
- redef fun n_methid=(node)
- do
- _n_methid = node
- node.parent = self
- end
- redef fun n_signature=(node)
- do
- _n_signature = node
- node.parent = self
- end
redef fun n_annotations=(node)
do
_n_annotations = node
v.enter_visit(_n_doc)
v.enter_visit(_n_kwredef)
v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwmeth)
- v.enter_visit(_n_methid)
- v.enter_visit(_n_signature)
- v.enter_visit(_n_annotations)
- end
-end
-redef class AInternMethPropdef
- init init_ainternmethpropdef (
- n_doc: nullable ADoc,
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_kwmeth: nullable TKwmeth,
- n_methid: nullable AMethid,
- n_signature: nullable ASignature
- )
- do
- _n_doc = n_doc
- if n_doc != null then n_doc.parent = self
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility.as(not null)
- n_visibility.parent = self
- _n_kwmeth = n_kwmeth.as(not null)
- n_kwmeth.parent = self
- _n_methid = n_methid.as(not null)
- n_methid.parent = self
- _n_signature = n_signature.as(not null)
- n_signature.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_doc == old_child then
- n_doc = new_child.as(nullable ADoc)
- return
- end
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(AVisibility)
- return
- end
- if _n_kwmeth == old_child then
- n_kwmeth = new_child.as(TKwmeth)
- return
- end
- if _n_methid == old_child then
- n_methid = new_child.as(AMethid)
- return
- end
- if _n_signature == old_child then
- n_signature = new_child.as(ASignature)
- return
- end
- end
-
- redef fun n_doc=(node)
- do
- _n_doc = node
- if node != null then node.parent = self
- end
- redef fun n_kwredef=(node)
- do
- _n_kwredef = node
- if node != null then node.parent = self
- end
- redef fun n_visibility=(node)
- do
- _n_visibility = node
- node.parent = self
- end
- redef fun n_kwmeth=(node)
- do
- _n_kwmeth = node
- node.parent = self
- end
- redef fun n_methid=(node)
- do
- _n_methid = node
- node.parent = self
- end
- redef fun n_signature=(node)
- do
- _n_signature = node
- node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_doc)
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwmeth)
- v.enter_visit(_n_methid)
- v.enter_visit(_n_signature)
- end
-end
-redef class AInternNewPropdef
- init init_ainternnewpropdef (
- n_doc: nullable ADoc,
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_kwnew: nullable TKwnew,
- n_methid: nullable AMethid,
- n_signature: nullable ASignature
- )
- do
- _n_doc = n_doc
- if n_doc != null then n_doc.parent = self
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility.as(not null)
- n_visibility.parent = self
- _n_kwnew = n_kwnew.as(not null)
- n_kwnew.parent = self
- _n_methid = n_methid
- if n_methid != null then n_methid.parent = self
- _n_signature = n_signature.as(not null)
- n_signature.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_doc == old_child then
- n_doc = new_child.as(nullable ADoc)
- return
- end
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(AVisibility)
- return
- end
- if _n_kwnew == old_child then
- n_kwnew = new_child.as(TKwnew)
- return
- end
- if _n_methid == old_child then
- n_methid = new_child.as(nullable AMethid)
- return
- end
- if _n_signature == old_child then
- n_signature = new_child.as(ASignature)
- return
- end
- end
-
- redef fun n_doc=(node)
- do
- _n_doc = node
- if node != null then node.parent = self
- end
- redef fun n_kwredef=(node)
- do
- _n_kwredef = node
- if node != null then node.parent = self
- end
- redef fun n_visibility=(node)
- do
- _n_visibility = node
- node.parent = self
- end
- redef fun n_kwnew=(node)
- do
- _n_kwnew = node
- node.parent = self
- end
- redef fun n_methid=(node)
- do
- _n_methid = node
- if node != null then node.parent = self
- end
- redef fun n_signature=(node)
- do
- _n_signature = node
- node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_doc)
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwnew)
- v.enter_visit(_n_methid)
- v.enter_visit(_n_signature)
- end
-end
-redef class AExternMethPropdef
- init init_aexternmethpropdef (
- n_doc: nullable ADoc,
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_kwmeth: nullable TKwmeth,
- n_methid: nullable AMethid,
- n_signature: nullable ASignature,
- n_annotations: nullable AAnnotations,
- n_extern: nullable TString,
- n_extern_calls: nullable AExternCalls,
- n_extern_code_block: nullable AExternCodeBlock
- )
- do
- _n_doc = n_doc
- if n_doc != null then n_doc.parent = self
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility.as(not null)
- n_visibility.parent = self
- _n_kwmeth = n_kwmeth.as(not null)
- n_kwmeth.parent = self
- _n_methid = n_methid.as(not null)
- n_methid.parent = self
- _n_signature = n_signature.as(not null)
- n_signature.parent = self
- _n_annotations = n_annotations
- if n_annotations != null then n_annotations.parent = self
- _n_extern = n_extern
- if n_extern != null then n_extern.parent = self
- _n_extern_calls = n_extern_calls
- if n_extern_calls != null then n_extern_calls.parent = self
- _n_extern_code_block = n_extern_code_block
- if n_extern_code_block != null then n_extern_code_block.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_doc == old_child then
- n_doc = new_child.as(nullable ADoc)
- return
- end
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(AVisibility)
- return
- end
- if _n_kwmeth == old_child then
- n_kwmeth = new_child.as(TKwmeth)
- return
- end
- if _n_methid == old_child then
- n_methid = new_child.as(AMethid)
- return
- end
- if _n_signature == old_child then
- n_signature = new_child.as(ASignature)
- return
- end
- if _n_annotations == old_child then
- n_annotations = new_child.as(nullable AAnnotations)
- return
- end
- if _n_extern == old_child then
- n_extern = new_child.as(nullable TString)
- return
- end
- if _n_extern_calls == old_child then
- n_extern_calls = new_child.as(nullable AExternCalls)
- return
- end
- if _n_extern_code_block == old_child then
- n_extern_code_block = new_child.as(nullable AExternCodeBlock)
- return
- end
- end
-
- redef fun n_doc=(node)
- do
- _n_doc = node
- if node != null then node.parent = self
- end
- redef fun n_kwredef=(node)
- do
- _n_kwredef = node
- if node != null then node.parent = self
- end
- redef fun n_visibility=(node)
- do
- _n_visibility = node
- node.parent = self
- end
- redef fun n_kwmeth=(node)
- do
- _n_kwmeth = node
- node.parent = self
- end
- redef fun n_methid=(node)
- do
- _n_methid = node
- node.parent = self
- end
- redef fun n_signature=(node)
- do
- _n_signature = node
- node.parent = self
- end
- redef fun n_annotations=(node)
- do
- _n_annotations = node
- if node != null then node.parent = self
- end
- redef fun n_extern=(node)
- do
- _n_extern = node
- if node != null then node.parent = self
- end
- redef fun n_extern_calls=(node)
- do
- _n_extern_calls = node
- if node != null then node.parent = self
- end
- redef fun n_extern_code_block=(node)
- do
- _n_extern_code_block = node
- if node != null then node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_doc)
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwmeth)
- v.enter_visit(_n_methid)
- v.enter_visit(_n_signature)
- v.enter_visit(_n_annotations)
- v.enter_visit(_n_extern)
- v.enter_visit(_n_extern_calls)
- v.enter_visit(_n_extern_code_block)
- end
-end
-redef class AConcreteMethPropdef
- init init_aconcretemethpropdef (
- n_doc: nullable ADoc,
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_kwmeth: nullable TKwmeth,
- n_methid: nullable AMethid,
- n_signature: nullable ASignature,
- n_annotations: nullable AAnnotations,
- n_block: nullable AExpr
- )
- do
- _n_doc = n_doc
- if n_doc != null then n_doc.parent = self
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility.as(not null)
- n_visibility.parent = self
- _n_kwmeth = n_kwmeth.as(not null)
- n_kwmeth.parent = self
- _n_methid = n_methid.as(not null)
- n_methid.parent = self
- _n_signature = n_signature.as(not null)
- n_signature.parent = self
- _n_annotations = n_annotations
- if n_annotations != null then n_annotations.parent = self
- _n_block = n_block
- if n_block != null then n_block.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_doc == old_child then
- n_doc = new_child.as(nullable ADoc)
- return
- end
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(AVisibility)
- return
- end
- if _n_kwmeth == old_child then
- n_kwmeth = new_child.as(TKwmeth)
- return
- end
- if _n_methid == old_child then
- n_methid = new_child.as(AMethid)
- return
- end
- if _n_signature == old_child then
- n_signature = new_child.as(ASignature)
- return
- end
- if _n_annotations == old_child then
- n_annotations = new_child.as(nullable AAnnotations)
- return
- end
- if _n_block == old_child then
- n_block = new_child.as(nullable AExpr)
- return
- end
- end
-
- redef fun n_doc=(node)
- do
- _n_doc = node
- if node != null then node.parent = self
- end
- redef fun n_kwredef=(node)
- do
- _n_kwredef = node
- if node != null then node.parent = self
- end
- redef fun n_visibility=(node)
- do
- _n_visibility = node
- node.parent = self
- end
- redef fun n_kwmeth=(node)
- do
- _n_kwmeth = node
- node.parent = self
- end
- redef fun n_methid=(node)
- do
- _n_methid = node
- node.parent = self
- end
- redef fun n_signature=(node)
- do
- _n_signature = node
- node.parent = self
- end
- redef fun n_annotations=(node)
- do
- _n_annotations = node
- if node != null then node.parent = self
- end
- redef fun n_block=(node)
- do
- _n_block = node
- if node != null then node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_doc)
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwmeth)
- v.enter_visit(_n_methid)
- v.enter_visit(_n_signature)
- v.enter_visit(_n_annotations)
- v.enter_visit(_n_block)
- end
-end
-redef class AConcreteInitPropdef
- init init_aconcreteinitpropdef (
- n_doc: nullable ADoc,
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_kwinit: nullable TKwinit,
- n_methid: nullable AMethid,
- n_signature: nullable ASignature,
- n_annotations: nullable AAnnotations,
- n_block: nullable AExpr
- )
- do
- _n_doc = n_doc
- if n_doc != null then n_doc.parent = self
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility.as(not null)
- n_visibility.parent = self
- _n_kwinit = n_kwinit.as(not null)
- n_kwinit.parent = self
- _n_methid = n_methid
- if n_methid != null then n_methid.parent = self
- _n_signature = n_signature.as(not null)
- n_signature.parent = self
- _n_annotations = n_annotations
- if n_annotations != null then n_annotations.parent = self
- _n_block = n_block
- if n_block != null then n_block.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_doc == old_child then
- n_doc = new_child.as(nullable ADoc)
- return
- end
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(AVisibility)
- return
- end
- if _n_kwinit == old_child then
- n_kwinit = new_child.as(TKwinit)
- return
- end
- if _n_methid == old_child then
- n_methid = new_child.as(nullable AMethid)
- return
- end
- if _n_signature == old_child then
- n_signature = new_child.as(ASignature)
- return
- end
- if _n_annotations == old_child then
- n_annotations = new_child.as(nullable AAnnotations)
- return
- end
- if _n_block == old_child then
- n_block = new_child.as(nullable AExpr)
- return
- end
- end
-
- redef fun n_doc=(node)
- do
- _n_doc = node
- if node != null then node.parent = self
- end
- redef fun n_kwredef=(node)
- do
- _n_kwredef = node
- if node != null then node.parent = self
- end
- redef fun n_visibility=(node)
- do
- _n_visibility = node
- node.parent = self
- end
- redef fun n_kwinit=(node)
- do
- _n_kwinit = node
- node.parent = self
- end
- redef fun n_methid=(node)
- do
- _n_methid = node
- if node != null then node.parent = self
- end
- redef fun n_signature=(node)
- do
- _n_signature = node
- node.parent = self
- end
- redef fun n_annotations=(node)
- do
- _n_annotations = node
- if node != null then node.parent = self
- end
- redef fun n_block=(node)
- do
- _n_block = node
- if node != null then node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_doc)
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwinit)
- v.enter_visit(_n_methid)
- v.enter_visit(_n_signature)
- v.enter_visit(_n_annotations)
- v.enter_visit(_n_block)
- end
-end
-redef class AExternInitPropdef
- init init_aexterninitpropdef (
- n_doc: nullable ADoc,
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_kwnew: nullable TKwnew,
- n_methid: nullable AMethid,
- n_signature: nullable ASignature,
- n_annotations: nullable AAnnotations,
- n_extern: nullable TString,
- n_extern_calls: nullable AExternCalls,
- n_extern_code_block: nullable AExternCodeBlock
- )
- do
- _n_doc = n_doc
- if n_doc != null then n_doc.parent = self
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility.as(not null)
- n_visibility.parent = self
- _n_kwnew = n_kwnew.as(not null)
- n_kwnew.parent = self
- _n_methid = n_methid
- if n_methid != null then n_methid.parent = self
- _n_signature = n_signature.as(not null)
- n_signature.parent = self
- _n_annotations = n_annotations
- if n_annotations != null then n_annotations.parent = self
- _n_extern = n_extern
- if n_extern != null then n_extern.parent = self
- _n_extern_calls = n_extern_calls
- if n_extern_calls != null then n_extern_calls.parent = self
- _n_extern_code_block = n_extern_code_block
- if n_extern_code_block != null then n_extern_code_block.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_doc == old_child then
- n_doc = new_child.as(nullable ADoc)
- return
- end
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(AVisibility)
- return
- end
- if _n_kwnew == old_child then
- n_kwnew = new_child.as(TKwnew)
- return
- end
- if _n_methid == old_child then
- n_methid = new_child.as(nullable AMethid)
- return
- end
- if _n_signature == old_child then
- n_signature = new_child.as(ASignature)
- return
- end
- if _n_annotations == old_child then
- n_annotations = new_child.as(nullable AAnnotations)
- return
- end
- if _n_extern == old_child then
- n_extern = new_child.as(nullable TString)
- return
- end
- if _n_extern_calls == old_child then
- n_extern_calls = new_child.as(nullable AExternCalls)
- return
- end
- if _n_extern_code_block == old_child then
- n_extern_code_block = new_child.as(nullable AExternCodeBlock)
- return
- end
- end
-
- redef fun n_doc=(node)
- do
- _n_doc = node
- if node != null then node.parent = self
- end
- redef fun n_kwredef=(node)
- do
- _n_kwredef = node
- if node != null then node.parent = self
- end
- redef fun n_visibility=(node)
- do
- _n_visibility = node
- node.parent = self
- end
- redef fun n_kwnew=(node)
- do
- _n_kwnew = node
- node.parent = self
- end
- redef fun n_methid=(node)
- do
- _n_methid = node
- if node != null then node.parent = self
- end
- redef fun n_signature=(node)
- do
- _n_signature = node
- node.parent = self
- end
- redef fun n_annotations=(node)
- do
- _n_annotations = node
- if node != null then node.parent = self
- end
- redef fun n_extern=(node)
- do
- _n_extern = node
- if node != null then node.parent = self
- end
- redef fun n_extern_calls=(node)
- do
- _n_extern_calls = node
- if node != null then node.parent = self
- end
- redef fun n_extern_code_block=(node)
- do
- _n_extern_code_block = node
- if node != null then node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_doc)
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwnew)
- v.enter_visit(_n_methid)
- v.enter_visit(_n_signature)
- v.enter_visit(_n_annotations)
- v.enter_visit(_n_extern)
- v.enter_visit(_n_extern_calls)
- v.enter_visit(_n_extern_code_block)
+ v.enter_visit(_n_kwvar)
+ v.enter_visit(_n_id2)
+ v.enter_visit(_n_type)
+ v.enter_visit(_n_expr)
+ v.enter_visit(_n_annotations)
end
end
redef class AMainMethPropdef
v.enter_visit(_n_annotations)
end
end
-redef class AReadAble
- init init_areadable (
+redef class AMethPropdef
+ init init_amethpropdef (
+ n_doc: nullable ADoc,
n_kwredef: nullable TKwredef,
- n_kwreadable: nullable TKwreadable
+ n_visibility: nullable AVisibility,
+ n_kwmeth: nullable TKwmeth,
+ n_kwinit: nullable TKwinit,
+ n_kwnew: nullable TKwnew,
+ n_methid: nullable AMethid,
+ n_signature: nullable ASignature,
+ n_annotations: nullable AAnnotations,
+ n_extern_calls: nullable AExternCalls,
+ n_extern_code_block: nullable AExternCodeBlock,
+ n_block: nullable AExpr
)
do
+ _n_doc = n_doc
+ if n_doc != null then n_doc.parent = self
_n_kwredef = n_kwredef
if n_kwredef != null then n_kwredef.parent = self
- _n_kwreadable = n_kwreadable.as(not null)
- n_kwreadable.parent = self
+ _n_visibility = n_visibility.as(not null)
+ n_visibility.parent = self
+ _n_kwmeth = n_kwmeth
+ if n_kwmeth != null then n_kwmeth.parent = self
+ _n_kwinit = n_kwinit
+ if n_kwinit != null then n_kwinit.parent = self
+ _n_kwnew = n_kwnew
+ if n_kwnew != null then n_kwnew.parent = self
+ _n_methid = n_methid
+ if n_methid != null then n_methid.parent = self
+ _n_signature = n_signature.as(not null)
+ n_signature.parent = self
+ _n_annotations = n_annotations
+ if n_annotations != null then n_annotations.parent = self
+ _n_extern_calls = n_extern_calls
+ if n_extern_calls != null then n_extern_calls.parent = self
+ _n_extern_code_block = n_extern_code_block
+ if n_extern_code_block != null then n_extern_code_block.parent = self
+ _n_block = n_block
+ if n_block != null then n_block.parent = self
end
redef fun replace_child(old_child: ANode, new_child: nullable ANode)
do
+ if _n_doc == old_child then
+ n_doc = new_child.as(nullable ADoc)
+ return
+ end
if _n_kwredef == old_child then
n_kwredef = new_child.as(nullable TKwredef)
return
end
- if _n_kwreadable == old_child then
- n_kwreadable = new_child.as(TKwreadable)
+ if _n_visibility == old_child then
+ n_visibility = new_child.as(AVisibility)
+ return
+ end
+ if _n_kwmeth == old_child then
+ n_kwmeth = new_child.as(nullable TKwmeth)
+ return
+ end
+ if _n_kwinit == old_child then
+ n_kwinit = new_child.as(nullable TKwinit)
+ return
+ end
+ if _n_kwnew == old_child then
+ n_kwnew = new_child.as(nullable TKwnew)
+ return
+ end
+ if _n_methid == old_child then
+ n_methid = new_child.as(nullable AMethid)
+ return
+ end
+ if _n_signature == old_child then
+ n_signature = new_child.as(ASignature)
+ return
+ end
+ if _n_annotations == old_child then
+ n_annotations = new_child.as(nullable AAnnotations)
+ return
+ end
+ if _n_extern_calls == old_child then
+ n_extern_calls = new_child.as(nullable AExternCalls)
+ return
+ end
+ if _n_extern_code_block == old_child then
+ n_extern_code_block = new_child.as(nullable AExternCodeBlock)
+ return
+ end
+ if _n_block == old_child then
+ n_block = new_child.as(nullable AExpr)
return
end
end
+ redef fun n_doc=(node)
+ do
+ _n_doc = node
+ if node != null then node.parent = self
+ end
redef fun n_kwredef=(node)
do
_n_kwredef = node
if node != null then node.parent = self
end
- redef fun n_kwreadable=(node)
+ redef fun n_visibility=(node)
do
- _n_kwreadable = node
+ _n_visibility = node
node.parent = self
end
-
-
- redef fun visit_all(v: Visitor)
+ redef fun n_kwmeth=(node)
do
- v.enter_visit(_n_kwredef)
- v.enter_visit(_n_kwreadable)
+ _n_kwmeth = node
+ if node != null then node.parent = self
end
-end
-redef class AWriteAble
- init init_awriteable (
- n_kwredef: nullable TKwredef,
- n_visibility: nullable AVisibility,
- n_kwwritable: nullable TKwwritable
- )
+ redef fun n_kwinit=(node)
do
- _n_kwredef = n_kwredef
- if n_kwredef != null then n_kwredef.parent = self
- _n_visibility = n_visibility
- if n_visibility != null then n_visibility.parent = self
- _n_kwwritable = n_kwwritable.as(not null)
- n_kwwritable.parent = self
+ _n_kwinit = node
+ if node != null then node.parent = self
end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+ redef fun n_kwnew=(node)
do
- if _n_kwredef == old_child then
- n_kwredef = new_child.as(nullable TKwredef)
- return
- end
- if _n_visibility == old_child then
- n_visibility = new_child.as(nullable AVisibility)
- return
- end
- if _n_kwwritable == old_child then
- n_kwwritable = new_child.as(TKwwritable)
- return
- end
+ _n_kwnew = node
+ if node != null then node.parent = self
end
-
- redef fun n_kwredef=(node)
+ redef fun n_methid=(node)
do
- _n_kwredef = node
+ _n_methid = node
if node != null then node.parent = self
end
- redef fun n_visibility=(node)
+ redef fun n_signature=(node)
do
- _n_visibility = node
+ _n_signature = node
+ node.parent = self
+ end
+ redef fun n_annotations=(node)
+ do
+ _n_annotations = node
if node != null then node.parent = self
end
- redef fun n_kwwritable=(node)
+ redef fun n_extern_calls=(node)
do
- _n_kwwritable = node
- node.parent = self
+ _n_extern_calls = node
+ if node != null then node.parent = self
+ end
+ redef fun n_extern_code_block=(node)
+ do
+ _n_extern_code_block = node
+ if node != null then node.parent = self
+ end
+ redef fun n_block=(node)
+ do
+ _n_block = node
+ if node != null then node.parent = self
end
redef fun visit_all(v: Visitor)
do
+ v.enter_visit(_n_doc)
v.enter_visit(_n_kwredef)
v.enter_visit(_n_visibility)
- v.enter_visit(_n_kwwritable)
+ v.enter_visit(_n_kwmeth)
+ v.enter_visit(_n_kwinit)
+ v.enter_visit(_n_kwnew)
+ v.enter_visit(_n_methid)
+ v.enter_visit(_n_signature)
+ v.enter_visit(_n_annotations)
+ v.enter_visit(_n_extern_calls)
+ v.enter_visit(_n_extern_code_block)
+ v.enter_visit(_n_block)
end
end
redef class AIdMethid
v.enter_visit(_n_star)
end
end
+redef class AStarstarMethid
+ init init_astarstarmethid (
+ n_starstar: nullable TStarstar
+ )
+ do
+ _n_starstar = n_starstar.as(not null)
+ n_starstar.parent = self
+ end
+
+ redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+ do
+ if _n_starstar == old_child then
+ n_starstar = new_child.as(TStarstar)
+ return
+ end
+ end
+
+ redef fun n_starstar=(node)
+ do
+ _n_starstar = node
+ node.parent = self
+ end
+
+
+ redef fun visit_all(v: Visitor)
+ do
+ v.enter_visit(_n_starstar)
+ end
+end
redef class ASlashMethid
init init_aslashmethid (
n_slash: nullable TSlash
v.enter_visit(_n_expr2)
end
end
+redef class AStarstarExpr
+ init init_astarstarexpr (
+ n_expr: nullable AExpr,
+ n_expr2: nullable AExpr
+ )
+ do
+ _n_expr = n_expr.as(not null)
+ n_expr.parent = self
+ _n_expr2 = n_expr2.as(not null)
+ n_expr2.parent = self
+ end
+
+ redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+ do
+ if _n_expr == old_child then
+ n_expr = new_child.as(AExpr)
+ return
+ end
+ if _n_expr2 == old_child then
+ n_expr2 = new_child.as(AExpr)
+ return
+ end
+ end
+
+ redef fun n_expr=(node)
+ do
+ _n_expr = node
+ node.parent = self
+ end
+ redef fun n_expr2=(node)
+ do
+ _n_expr2 = node
+ node.parent = self
+ end
+
+
+ redef fun visit_all(v: Visitor)
+ do
+ v.enter_visit(_n_expr)
+ v.enter_visit(_n_expr2)
+ end
+end
redef class ASlashExpr
init init_aslashexpr (
n_expr: nullable AExpr,
v.enter_visit(_n_id)
end
end
-redef class AKwinternAtid
- init init_akwinternatid (
- n_id: nullable TKwintern
- )
- do
- _n_id = n_id.as(not null)
- n_id.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_id == old_child then
- n_id = new_child.as(TKwintern)
- return
- end
- end
-
- redef fun n_id=(node)
- do
- _n_id = node
- node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_id)
- end
-end
-redef class AKwreadableAtid
- init init_akwreadableatid (
- n_id: nullable TKwreadable
- )
- do
- _n_id = n_id.as(not null)
- n_id.parent = self
- end
-
- redef fun replace_child(old_child: ANode, new_child: nullable ANode)
- do
- if _n_id == old_child then
- n_id = new_child.as(TKwreadable)
- return
- end
- end
-
- redef fun n_id=(node)
- do
- _n_id = node
- node.parent = self
- end
-
-
- redef fun visit_all(v: Visitor)
- do
- v.enter_visit(_n_id)
- end
-end
-redef class AKwwritableAtid
- init init_akwwritableatid (
- n_id: nullable TKwwritable
+redef class AKwabstractAtid
+ init init_akwabstractatid (
+ n_id: nullable TKwabstract
)
do
_n_id = n_id.as(not null)
redef fun replace_child(old_child: ANode, new_child: nullable ANode)
do
if _n_id == old_child then
- n_id = new_child.as(TKwwritable)
+ n_id = new_child.as(TKwabstract)
return
end
end
92, 92, 61,
93, 255, 59
};
+static const int lexer_goto_row13[] = {
+ 1,
+ 42, 42, 62
+};
static const int lexer_goto_row14[] = {
1,
- 61, 61, 62
+ 61, 61, 63
};
static const int lexer_goto_row16[] = {
1,
- 61, 61, 63
+ 61, 61, 64
};
static const int lexer_goto_row17[] = {
2,
- 46, 46, 64,
- 48, 57, 65
+ 46, 46, 65,
+ 48, 57, 66
};
static const int lexer_goto_row19[] = {
4,
- 46, 46, 66,
+ 46, 46, 67,
48, 57, 19,
- 88, 88, 67,
- 120, 120, 68
+ 88, 88, 68,
+ 120, 120, 69
};
static const int lexer_goto_row20[] = {
1,
};
static const int lexer_goto_row21[] = {
1,
- 58, 58, 69
+ 58, 58, 70
};
static const int lexer_goto_row22[] = {
2,
- 60, 60, 70,
- 61, 61, 71
+ 60, 60, 71,
+ 61, 61, 72
};
static const int lexer_goto_row23[] = {
1,
- 61, 61, 72
+ 61, 61, 73
};
static const int lexer_goto_row24[] = {
2,
- 61, 61, 73,
- 62, 62, 74
+ 61, 61, 74,
+ 62, 62, 75
};
static const int lexer_goto_row26[] = {
4,
- 48, 57, 75,
- 65, 90, 76,
- 95, 95, 77,
- 97, 122, 78
+ 48, 57, 76,
+ 65, 90, 77,
+ 95, 95, 78,
+ 97, 122, 79
};
static const int lexer_goto_row29[] = {
2,
- 95, 95, 79,
- 97, 122, 80
+ 95, 95, 80,
+ 97, 122, 81
};
static const int lexer_goto_row30[] = {
1,
- 123, 123, 81
+ 123, 123, 82
};
static const int lexer_goto_row31[] = {
10,
- 48, 57, 82,
- 65, 90, 83,
- 95, 95, 84,
- 97, 97, 85,
- 98, 98, 86,
- 99, 109, 85,
- 110, 110, 87,
- 111, 114, 85,
- 115, 115, 88,
- 116, 122, 85
+ 48, 57, 83,
+ 65, 90, 84,
+ 95, 95, 85,
+ 97, 97, 86,
+ 98, 98, 87,
+ 99, 109, 86,
+ 110, 110, 88,
+ 111, 114, 86,
+ 115, 115, 89,
+ 116, 122, 86
};
static const int lexer_goto_row32[] = {
4,
48, 95, -32,
- 97, 113, 85,
- 114, 114, 89,
- 115, 122, 85
+ 97, 113, 86,
+ 114, 114, 90,
+ 115, 122, 86
};
static const int lexer_goto_row33[] = {
6,
48, 95, -32,
- 97, 107, 85,
- 108, 108, 90,
- 109, 110, 85,
- 111, 111, 91,
- 112, 122, 85
+ 97, 107, 86,
+ 108, 108, 91,
+ 109, 110, 86,
+ 111, 111, 92,
+ 112, 122, 86
};
static const int lexer_goto_row34[] = {
4,
48, 95, -32,
- 97, 110, 85,
- 111, 111, 92,
- 112, 122, 85
+ 97, 110, 86,
+ 111, 111, 93,
+ 112, 122, 86
};
static const int lexer_goto_row35[] = {
7,
48, 107, -34,
- 108, 108, 93,
- 109, 109, 85,
- 110, 110, 94,
- 111, 119, 85,
- 120, 120, 95,
- 121, 122, 85
+ 108, 108, 94,
+ 109, 109, 86,
+ 110, 110, 95,
+ 111, 119, 86,
+ 120, 120, 96,
+ 121, 122, 86
};
static const int lexer_goto_row36[] = {
7,
48, 95, -32,
- 97, 97, 96,
- 98, 110, 85,
- 111, 111, 97,
- 112, 116, 85,
- 117, 117, 98,
- 118, 122, 85
+ 97, 97, 97,
+ 98, 110, 86,
+ 111, 111, 98,
+ 112, 116, 86,
+ 117, 117, 99,
+ 118, 122, 86
};
static const int lexer_goto_row37[] = {
2,
48, 95, -32,
- 97, 122, 85
+ 97, 122, 86
};
static const int lexer_goto_row38[] = {
9,
48, 95, -32,
- 97, 101, 85,
- 102, 102, 99,
- 103, 108, 85,
- 109, 109, 100,
- 110, 110, 101,
- 111, 114, 85,
- 115, 115, 102,
- 116, 122, 85
+ 97, 101, 86,
+ 102, 102, 100,
+ 103, 108, 86,
+ 109, 109, 101,
+ 110, 110, 102,
+ 111, 114, 86,
+ 115, 115, 103,
+ 116, 122, 86
};
static const int lexer_goto_row39[] = {
5,
48, 95, -32,
- 97, 97, 103,
- 98, 110, 85,
- 111, 111, 104,
- 112, 122, 85
+ 97, 97, 104,
+ 98, 110, 86,
+ 111, 111, 105,
+ 112, 122, 86
};
static const int lexer_goto_row40[] = {
3,
48, 110, -35,
- 111, 111, 105,
- 112, 122, 85
+ 111, 111, 106,
+ 112, 122, 86
};
static const int lexer_goto_row41[] = {
8,
48, 95, -32,
- 97, 100, 85,
- 101, 101, 106,
- 102, 110, 85,
- 111, 111, 107,
- 112, 116, 85,
- 117, 117, 108,
- 118, 122, 85
+ 97, 100, 86,
+ 101, 101, 107,
+ 102, 110, 86,
+ 111, 111, 108,
+ 112, 116, 86,
+ 117, 117, 109,
+ 118, 122, 86
};
static const int lexer_goto_row42[] = {
6,
48, 95, -32,
- 97, 109, 85,
- 110, 110, 109,
- 111, 113, 85,
- 114, 114, 110,
- 115, 122, 85
+ 97, 109, 86,
+ 110, 110, 110,
+ 111, 113, 86,
+ 114, 114, 111,
+ 115, 122, 86
};
static const int lexer_goto_row43[] = {
7,
48, 95, -32,
- 97, 97, 111,
- 98, 113, 85,
- 114, 114, 112,
- 115, 116, 85,
- 117, 117, 113,
- 118, 122, 85
+ 97, 97, 112,
+ 98, 113, 86,
+ 114, 114, 113,
+ 115, 116, 86,
+ 117, 117, 114,
+ 118, 122, 86
};
static const int lexer_goto_row44[] = {
3,
48, 100, -42,
- 101, 101, 114,
- 102, 122, 85
+ 101, 101, 115,
+ 102, 122, 86
};
static const int lexer_goto_row45[] = {
5,
48, 100, -42,
- 101, 101, 115,
- 102, 116, 85,
- 117, 117, 116,
- 118, 122, 85
+ 101, 101, 116,
+ 102, 116, 86,
+ 117, 117, 117,
+ 118, 122, 86
};
static const int lexer_goto_row46[] = {
8,
48, 95, -32,
- 97, 103, 85,
- 104, 104, 117,
- 105, 113, 85,
- 114, 114, 118,
- 115, 120, 85,
- 121, 121, 119,
- 122, 122, 85
+ 97, 103, 86,
+ 104, 104, 118,
+ 105, 113, 86,
+ 114, 114, 119,
+ 115, 120, 86,
+ 121, 121, 120,
+ 122, 122, 86
};
static const int lexer_goto_row47[] = {
3,
48, 109, -43,
- 110, 110, 120,
- 111, 122, 85
+ 110, 110, 121,
+ 111, 122, 86
};
static const int lexer_goto_row48[] = {
3,
48, 95, -32,
- 97, 97, 121,
- 98, 122, 85
+ 97, 97, 122,
+ 98, 122, 86
};
static const int lexer_goto_row49[] = {
- 5,
+ 3,
48, 103, -47,
- 104, 104, 122,
- 105, 113, 85,
- 114, 114, 123,
- 115, 122, 85
+ 104, 104, 123,
+ 105, 122, 86
};
static const int lexer_goto_row50[] = {
11,
11, 12, 135,
14, 255, 135
};
-static const int lexer_goto_row65[] = {
- 1,
- 46, 46, 136
-};
static const int lexer_goto_row66[] = {
1,
- 48, 57, 65
+ 46, 46, 136
};
static const int lexer_goto_row67[] = {
1,
- 48, 57, 65
+ 48, 57, 66
};
static const int lexer_goto_row68[] = {
+ 1,
+ 48, 57, 66
+};
+static const int lexer_goto_row69[] = {
3,
48, 57, 137,
65, 70, 138,
97, 102, 139
};
-static const int lexer_goto_row69[] = {
+static const int lexer_goto_row70[] = {
1,
- 48, 102, -69
+ 48, 102, -70
};
-static const int lexer_goto_row72[] = {
+static const int lexer_goto_row73[] = {
1,
62, 62, 140
};
-static const int lexer_goto_row76[] = {
- 1,
- 48, 122, -27
-};
static const int lexer_goto_row77[] = {
1,
48, 122, -27
};
static const int lexer_goto_row80[] = {
1,
- 100, 100, 141
+ 48, 122, -27
};
static const int lexer_goto_row81[] = {
+ 1,
+ 100, 100, 141
+};
+static const int lexer_goto_row82[] = {
4,
48, 57, 142,
65, 90, 143,
95, 95, 144,
97, 122, 145
};
-static const int lexer_goto_row82[] = {
+static const int lexer_goto_row83[] = {
5,
0, 91, 146,
92, 92, 147,
96, 96, 148,
97, 255, 146
};
-static const int lexer_goto_row83[] = {
- 1,
- 48, 122, -38
-};
static const int lexer_goto_row84[] = {
1,
48, 122, -38
48, 122, -38
};
static const int lexer_goto_row87[] = {
+ 1,
+ 48, 122, -38
+};
+static const int lexer_goto_row88[] = {
5,
48, 110, -35,
111, 111, 149,
- 112, 114, 85,
+ 112, 114, 86,
115, 115, 150,
- 116, 122, 85
+ 116, 122, 86
};
-static const int lexer_goto_row88[] = {
+static const int lexer_goto_row89[] = {
4,
48, 95, -32,
- 97, 99, 85,
+ 97, 99, 86,
100, 100, 151,
- 101, 122, 85
+ 101, 122, 86
};
-static const int lexer_goto_row89[] = {
+static const int lexer_goto_row90[] = {
4,
48, 95, -32,
- 97, 114, 85,
+ 97, 114, 86,
115, 115, 152,
- 116, 122, 85
+ 116, 122, 86
};
-static const int lexer_goto_row90[] = {
+static const int lexer_goto_row91[] = {
3,
48, 100, -42,
101, 101, 153,
- 102, 122, 85
+ 102, 122, 86
};
-static const int lexer_goto_row91[] = {
+static const int lexer_goto_row92[] = {
3,
48, 95, -32,
97, 97, 154,
- 98, 122, 85
+ 98, 122, 86
};
-static const int lexer_goto_row92[] = {
+static const int lexer_goto_row93[] = {
3,
48, 109, -43,
110, 110, 155,
- 111, 122, 85
+ 111, 122, 86
};
-static const int lexer_goto_row93[] = {
+static const int lexer_goto_row94[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row94[] = {
+static const int lexer_goto_row95[] = {
3,
- 48, 114, -90,
+ 48, 114, -91,
115, 115, 156,
- 116, 122, 85
+ 116, 122, 86
};
-static const int lexer_goto_row95[] = {
+static const int lexer_goto_row96[] = {
5,
- 48, 99, -89,
+ 48, 99, -90,
100, 100, 157,
- 101, 116, 85,
+ 101, 116, 86,
117, 117, 158,
- 118, 122, 85
+ 118, 122, 86
};
-static const int lexer_goto_row96[] = {
+static const int lexer_goto_row97[] = {
4,
48, 95, -32,
- 97, 115, 85,
+ 97, 115, 86,
116, 116, 159,
- 117, 122, 85
+ 117, 122, 86
};
-static const int lexer_goto_row97[] = {
+static const int lexer_goto_row98[] = {
3,
48, 107, -34,
108, 108, 160,
- 109, 122, 85
+ 109, 122, 86
};
-static const int lexer_goto_row98[] = {
+static const int lexer_goto_row99[] = {
3,
48, 113, -33,
114, 114, 161,
- 115, 122, 85
+ 115, 122, 86
};
-static const int lexer_goto_row99[] = {
+static const int lexer_goto_row100[] = {
3,
48, 109, -43,
110, 110, 162,
- 111, 122, 85
+ 111, 122, 86
};
-static const int lexer_goto_row100[] = {
+static const int lexer_goto_row101[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row101[] = {
+static const int lexer_goto_row102[] = {
4,
48, 95, -32,
- 97, 111, 85,
+ 97, 111, 86,
112, 112, 163,
- 113, 122, 85
+ 113, 122, 86
};
-static const int lexer_goto_row102[] = {
+static const int lexer_goto_row103[] = {
6,
48, 95, -32,
- 97, 104, 85,
+ 97, 104, 86,
105, 105, 164,
- 106, 115, 85,
+ 106, 115, 86,
116, 116, 165,
- 117, 122, 85
+ 117, 122, 86
};
-static const int lexer_goto_row103[] = {
+static const int lexer_goto_row104[] = {
5,
48, 95, -32,
97, 97, 166,
- 98, 114, 85,
+ 98, 114, 86,
115, 115, 167,
- 116, 122, 85
+ 116, 122, 86
};
-static const int lexer_goto_row104[] = {
+static const int lexer_goto_row105[] = {
3,
48, 97, -32,
98, 98, 168,
- 99, 122, 85
+ 99, 122, 86
};
-static const int lexer_goto_row105[] = {
+static const int lexer_goto_row106[] = {
3,
48, 110, -35,
111, 111, 169,
- 112, 122, 85
+ 112, 122, 86
};
-static const int lexer_goto_row106[] = {
+static const int lexer_goto_row107[] = {
3,
- 48, 99, -89,
+ 48, 99, -90,
100, 100, 170,
- 101, 122, 85
+ 101, 122, 86
};
-static const int lexer_goto_row107[] = {
+static const int lexer_goto_row108[] = {
4,
48, 95, -32,
- 97, 118, 85,
+ 97, 118, 86,
119, 119, 171,
- 120, 122, 85
+ 120, 122, 86
};
-static const int lexer_goto_row108[] = {
+static const int lexer_goto_row109[] = {
3,
- 48, 115, -97,
+ 48, 115, -98,
116, 116, 172,
- 117, 122, 85
+ 117, 122, 86
};
-static const int lexer_goto_row109[] = {
+static const int lexer_goto_row110[] = {
3,
48, 107, -34,
108, 108, 173,
- 109, 122, 85
+ 109, 122, 86
};
-static const int lexer_goto_row110[] = {
+static const int lexer_goto_row111[] = {
4,
48, 95, -32,
- 97, 98, 85,
+ 97, 98, 86,
99, 99, 174,
- 100, 122, 85
+ 100, 122, 86
};
-static const int lexer_goto_row111[] = {
+static const int lexer_goto_row112[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row112[] = {
+static const int lexer_goto_row113[] = {
3,
- 48, 98, -111,
+ 48, 98, -112,
99, 99, 175,
- 100, 122, 85
+ 100, 122, 86
};
-static const int lexer_goto_row113[] = {
+static const int lexer_goto_row114[] = {
5,
- 48, 104, -103,
+ 48, 104, -104,
105, 105, 176,
- 106, 110, 85,
+ 106, 110, 86,
111, 111, 177,
- 112, 122, 85
+ 112, 122, 86
};
-static const int lexer_goto_row114[] = {
+static const int lexer_goto_row115[] = {
3,
48, 97, -32,
98, 98, 178,
- 99, 122, 85
-};
-static const int lexer_goto_row115[] = {
- 7,
- 48, 95, -32,
- 97, 97, 179,
- 98, 99, 85,
- 100, 100, 180,
- 101, 115, 85,
- 116, 116, 181,
- 117, 122, 85
+ 99, 122, 86
};
static const int lexer_goto_row116[] = {
- 3,
- 48, 107, -34,
- 108, 108, 182,
- 109, 122, 85
+ 5,
+ 48, 99, -90,
+ 100, 100, 179,
+ 101, 115, 86,
+ 116, 116, 180,
+ 117, 122, 86
};
static const int lexer_goto_row117[] = {
3,
- 48, 111, -102,
- 112, 112, 183,
- 113, 122, 85
+ 48, 107, -34,
+ 108, 108, 181,
+ 109, 122, 86
};
static const int lexer_goto_row118[] = {
3,
- 48, 100, -42,
- 101, 101, 184,
- 102, 122, 85
+ 48, 111, -103,
+ 112, 112, 182,
+ 113, 122, 86
};
static const int lexer_goto_row119[] = {
- 4,
- 48, 95, -32,
- 97, 116, 85,
- 117, 117, 185,
- 118, 122, 85
+ 3,
+ 48, 100, -42,
+ 101, 101, 183,
+ 102, 122, 86
};
static const int lexer_goto_row120[] = {
- 3,
- 48, 111, -102,
- 112, 112, 186,
- 113, 122, 85
+ 4,
+ 48, 95, -32,
+ 97, 116, 86,
+ 117, 117, 184,
+ 118, 122, 86
};
static const int lexer_goto_row121[] = {
3,
- 48, 104, -103,
- 105, 105, 187,
- 106, 122, 85
+ 48, 111, -103,
+ 112, 112, 185,
+ 113, 122, 86
};
static const int lexer_goto_row122[] = {
3,
- 48, 113, -33,
- 114, 114, 188,
- 115, 122, 85
+ 48, 104, -104,
+ 105, 105, 186,
+ 106, 122, 86
};
static const int lexer_goto_row123[] = {
3,
- 48, 104, -103,
- 105, 105, 189,
- 106, 122, 85
+ 48, 113, -33,
+ 114, 114, 187,
+ 115, 122, 86
};
static const int lexer_goto_row124[] = {
3,
- 48, 104, -103,
- 105, 105, 190,
- 106, 122, 85
+ 48, 104, -104,
+ 105, 105, 188,
+ 106, 122, 86
};
static const int lexer_goto_row125[] = {
2,
};
static const int lexer_goto_row127[] = {
3,
- 0, 9, 191,
- 11, 12, 191,
- 14, 255, 191
+ 0, 9, 189,
+ 11, 12, 189,
+ 14, 255, 189
};
static const int lexer_goto_row129[] = {
3,
0, 124, -51,
- 125, 125, 192,
+ 125, 125, 190,
126, 255, 124
};
static const int lexer_goto_row131[] = {
11,
- 0, 9, 193,
- 10, 10, 194,
- 11, 12, 193,
- 13, 13, 195,
- 14, 33, 193,
- 34, 34, 196,
- 35, 91, 193,
- 92, 92, 197,
- 93, 122, 193,
- 123, 123, 198,
- 124, 255, 193
+ 0, 9, 191,
+ 10, 10, 192,
+ 11, 12, 191,
+ 13, 13, 193,
+ 14, 33, 191,
+ 34, 34, 194,
+ 35, 91, 191,
+ 92, 92, 195,
+ 93, 122, 191,
+ 123, 123, 196,
+ 124, 255, 191
};
static const int lexer_goto_row132[] = {
1,
};
static const int lexer_goto_row135[] = {
9,
- 0, 9, 199,
- 10, 10, 200,
- 11, 12, 199,
- 13, 13, 201,
- 14, 38, 199,
- 39, 39, 202,
- 40, 91, 199,
- 92, 92, 203,
- 93, 255, 199
+ 0, 9, 197,
+ 10, 10, 198,
+ 11, 12, 197,
+ 13, 13, 199,
+ 14, 38, 197,
+ 39, 39, 200,
+ 40, 91, 197,
+ 92, 92, 201,
+ 93, 255, 197
};
static const int lexer_goto_row136[] = {
1,
- 39, 39, 204
+ 39, 39, 202
};
static const int lexer_goto_row138[] = {
1,
- 48, 102, -69
+ 48, 102, -70
};
static const int lexer_goto_row139[] = {
1,
- 48, 102, -69
+ 48, 102, -70
};
static const int lexer_goto_row140[] = {
1,
- 48, 102, -69
+ 48, 102, -70
};
static const int lexer_goto_row142[] = {
1,
- 101, 101, 205
+ 101, 101, 203
};
static const int lexer_goto_row143[] = {
1,
- 48, 122, -82
+ 48, 122, -83
};
static const int lexer_goto_row144[] = {
1,
- 48, 122, -82
+ 48, 122, -83
};
static const int lexer_goto_row145[] = {
1,
- 48, 122, -82
+ 48, 122, -83
};
static const int lexer_goto_row146[] = {
1,
- 48, 122, -82
+ 48, 122, -83
};
static const int lexer_goto_row147[] = {
1,
- 0, 255, -83
+ 0, 255, -84
};
static const int lexer_goto_row148[] = {
1,
- 0, 255, 206
+ 0, 255, 204
};
static const int lexer_goto_row149[] = {
1,
- 125, 125, 207
+ 125, 125, 205
};
static const int lexer_goto_row150[] = {
3,
48, 113, -33,
- 114, 114, 208,
- 115, 122, 85
+ 114, 114, 206,
+ 115, 122, 86
};
static const int lexer_goto_row151[] = {
3,
- 48, 115, -97,
- 116, 116, 209,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 207,
+ 117, 122, 86
};
static const int lexer_goto_row152[] = {
1,
static const int lexer_goto_row153[] = {
3,
48, 100, -42,
- 101, 101, 210,
- 102, 122, 85
+ 101, 101, 208,
+ 102, 122, 86
};
static const int lexer_goto_row154[] = {
3,
48, 95, -32,
- 97, 97, 211,
- 98, 122, 85
+ 97, 97, 209,
+ 98, 122, 86
};
static const int lexer_goto_row155[] = {
3,
- 48, 114, -90,
- 115, 115, 212,
- 116, 122, 85
+ 48, 114, -91,
+ 115, 115, 210,
+ 116, 122, 86
};
static const int lexer_goto_row156[] = {
3,
- 48, 115, -97,
- 116, 116, 213,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 211,
+ 117, 122, 86
};
static const int lexer_goto_row157[] = {
3,
48, 100, -42,
- 101, 101, 214,
- 102, 122, 85
+ 101, 101, 212,
+ 102, 122, 86
};
static const int lexer_goto_row158[] = {
1,
static const int lexer_goto_row159[] = {
4,
48, 95, -32,
- 97, 108, 85,
- 109, 109, 215,
- 110, 122, 85
+ 97, 108, 86,
+ 109, 109, 213,
+ 110, 122, 86
};
static const int lexer_goto_row160[] = {
3,
48, 100, -42,
- 101, 101, 216,
- 102, 122, 85
+ 101, 101, 214,
+ 102, 122, 86
};
static const int lexer_goto_row161[] = {
3,
- 48, 114, -90,
- 115, 115, 217,
- 116, 122, 85
+ 48, 114, -91,
+ 115, 115, 215,
+ 116, 122, 86
};
static const int lexer_goto_row162[] = {
1,
static const int lexer_goto_row164[] = {
5,
48, 107, -34,
- 108, 108, 218,
- 109, 110, 85,
- 111, 111, 219,
- 112, 122, 85
+ 108, 108, 216,
+ 109, 110, 86,
+ 111, 111, 217,
+ 112, 122, 86
};
static const int lexer_goto_row165[] = {
3,
- 48, 115, -97,
- 116, 116, 220,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 218,
+ 117, 122, 86
};
static const int lexer_goto_row166[] = {
5,
48, 100, -42,
- 101, 101, 221,
- 102, 113, 85,
- 114, 114, 222,
- 115, 122, 85
+ 101, 101, 219,
+ 102, 113, 86,
+ 114, 114, 220,
+ 115, 122, 86
};
static const int lexer_goto_row167[] = {
1,
static const int lexer_goto_row168[] = {
3,
48, 100, -42,
- 101, 101, 223,
- 102, 122, 85
+ 101, 101, 221,
+ 102, 122, 86
};
static const int lexer_goto_row169[] = {
3,
48, 100, -42,
- 101, 101, 224,
- 102, 122, 85
+ 101, 101, 222,
+ 102, 122, 86
};
static const int lexer_goto_row170[] = {
3,
- 48, 111, -102,
- 112, 112, 225,
- 113, 122, 85
+ 48, 111, -103,
+ 112, 112, 223,
+ 113, 122, 86
};
static const int lexer_goto_row171[] = {
3,
- 48, 116, -120,
- 117, 117, 226,
- 118, 122, 85
+ 48, 116, -121,
+ 117, 117, 224,
+ 118, 122, 86
};
static const int lexer_goto_row172[] = {
1,
static const int lexer_goto_row174[] = {
3,
48, 107, -34,
- 108, 108, 227,
- 109, 122, 85
+ 108, 108, 225,
+ 109, 122, 86
};
static const int lexer_goto_row175[] = {
3,
48, 100, -42,
- 101, 101, 228,
- 102, 122, 85
+ 101, 101, 226,
+ 102, 122, 86
};
static const int lexer_goto_row176[] = {
4,
48, 95, -32,
- 97, 106, 85,
- 107, 107, 229,
- 108, 122, 85
+ 97, 106, 86,
+ 107, 107, 227,
+ 108, 122, 86
};
static const int lexer_goto_row177[] = {
4,
48, 95, -32,
- 97, 117, 85,
- 118, 118, 230,
- 119, 122, 85
+ 97, 117, 86,
+ 118, 118, 228,
+ 119, 122, 86
};
static const int lexer_goto_row178[] = {
3,
- 48, 115, -97,
- 116, 116, 231,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 229,
+ 117, 122, 86
};
static const int lexer_goto_row179[] = {
3,
48, 107, -34,
- 108, 108, 232,
- 109, 122, 85
+ 108, 108, 230,
+ 109, 122, 86
};
static const int lexer_goto_row180[] = {
3,
- 48, 99, -89,
- 100, 100, 233,
- 101, 122, 85
+ 48, 100, -42,
+ 101, 101, 231,
+ 102, 122, 86
};
static const int lexer_goto_row181[] = {
3,
- 48, 100, -42,
- 101, 101, 234,
- 102, 122, 85
+ 48, 116, -121,
+ 117, 117, 232,
+ 118, 122, 86
};
static const int lexer_goto_row182[] = {
3,
- 48, 116, -120,
- 117, 117, 235,
- 118, 122, 85
+ 48, 101, -39,
+ 102, 102, 233,
+ 103, 122, 86
};
static const int lexer_goto_row183[] = {
3,
- 48, 101, -39,
- 102, 102, 236,
- 103, 122, 85
+ 48, 100, -42,
+ 101, 101, 234,
+ 102, 122, 86
};
static const int lexer_goto_row184[] = {
3,
- 48, 100, -42,
- 101, 101, 237,
- 102, 122, 85
+ 48, 109, -43,
+ 110, 110, 235,
+ 111, 122, 86
};
static const int lexer_goto_row185[] = {
3,
- 48, 109, -43,
- 110, 110, 238,
- 111, 122, 85
+ 48, 100, -42,
+ 101, 101, 236,
+ 102, 122, 86
};
static const int lexer_goto_row186[] = {
3,
48, 100, -42,
- 101, 101, 239,
- 102, 122, 85
+ 101, 101, 237,
+ 102, 122, 86
};
static const int lexer_goto_row187[] = {
3,
- 48, 100, -42,
- 101, 101, 240,
- 102, 122, 85
-};
-static const int lexer_goto_row188[] = {
- 3,
48, 117, -178,
- 118, 118, 241,
- 119, 122, 85
+ 118, 118, 238,
+ 119, 122, 86
};
-static const int lexer_goto_row189[] = {
+static const int lexer_goto_row188[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row190[] = {
+static const int lexer_goto_row189[] = {
3,
48, 107, -34,
- 108, 108, 242,
- 109, 122, 85
-};
-static const int lexer_goto_row191[] = {
- 3,
- 48, 115, -97,
- 116, 116, 243,
- 117, 122, 85
+ 108, 108, 239,
+ 109, 122, 86
};
-static const int lexer_goto_row192[] = {
+static const int lexer_goto_row190[] = {
1,
0, 255, -126
};
-static const int lexer_goto_row193[] = {
+static const int lexer_goto_row191[] = {
11,
- 0, 9, 244,
- 10, 10, 245,
- 11, 12, 244,
- 13, 13, 246,
- 14, 33, 244,
- 34, 34, 247,
- 35, 91, 244,
- 92, 92, 248,
- 93, 122, 244,
- 123, 123, 249,
- 124, 255, 244
+ 0, 9, 240,
+ 10, 10, 241,
+ 11, 12, 240,
+ 13, 13, 242,
+ 14, 33, 240,
+ 34, 34, 243,
+ 35, 91, 240,
+ 92, 92, 244,
+ 93, 122, 240,
+ 123, 123, 245,
+ 124, 255, 240
};
-static const int lexer_goto_row194[] = {
+static const int lexer_goto_row192[] = {
1,
0, 255, -132
};
-static const int lexer_goto_row195[] = {
+static const int lexer_goto_row193[] = {
1,
0, 255, -132
};
-static const int lexer_goto_row196[] = {
+static const int lexer_goto_row194[] = {
1,
0, 255, -132
};
-static const int lexer_goto_row197[] = {
+static const int lexer_goto_row195[] = {
5,
0, 33, -132,
- 34, 34, 250,
+ 34, 34, 246,
35, 122, -132,
- 123, 123, 251,
- 124, 255, 193
+ 123, 123, 247,
+ 124, 255, 191
};
-static const int lexer_goto_row198[] = {
+static const int lexer_goto_row196[] = {
3,
- 0, 9, 252,
- 11, 12, 252,
- 14, 255, 252
+ 0, 9, 248,
+ 11, 12, 248,
+ 14, 255, 248
};
-static const int lexer_goto_row199[] = {
+static const int lexer_goto_row197[] = {
5,
0, 33, -132,
- 34, 34, 253,
+ 34, 34, 249,
35, 122, -132,
- 123, 123, 254,
- 124, 255, 193
+ 123, 123, 250,
+ 124, 255, 191
};
-static const int lexer_goto_row200[] = {
+static const int lexer_goto_row198[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row201[] = {
+static const int lexer_goto_row199[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row202[] = {
+static const int lexer_goto_row200[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row203[] = {
+static const int lexer_goto_row201[] = {
9,
- 0, 9, 255,
- 10, 10, 256,
- 11, 12, 255,
- 13, 13, 257,
- 14, 38, 255,
- 39, 39, 258,
- 40, 91, 255,
- 92, 92, 259,
- 93, 255, 255
+ 0, 9, 251,
+ 10, 10, 252,
+ 11, 12, 251,
+ 13, 13, 253,
+ 14, 38, 251,
+ 39, 39, 254,
+ 40, 91, 251,
+ 92, 92, 255,
+ 93, 255, 251
};
-static const int lexer_goto_row204[] = {
+static const int lexer_goto_row202[] = {
3,
- 0, 9, 260,
- 11, 12, 260,
- 14, 255, 260
+ 0, 9, 256,
+ 11, 12, 256,
+ 14, 255, 256
};
-static const int lexer_goto_row206[] = {
+static const int lexer_goto_row204[] = {
1,
- 98, 98, 261
+ 98, 98, 257
};
-static const int lexer_goto_row207[] = {
+static const int lexer_goto_row205[] = {
1,
- 0, 255, -83
+ 0, 255, -84
};
-static const int lexer_goto_row209[] = {
+static const int lexer_goto_row207[] = {
3,
- 48, 115, -97,
- 116, 116, 262,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 258,
+ 117, 122, 86
};
-static const int lexer_goto_row210[] = {
+static const int lexer_goto_row208[] = {
3,
48, 113, -33,
- 114, 114, 263,
- 115, 122, 85
+ 114, 114, 259,
+ 115, 122, 86
};
-static const int lexer_goto_row211[] = {
+static const int lexer_goto_row209[] = {
3,
48, 113, -33,
- 114, 114, 264,
- 115, 122, 85
+ 114, 114, 260,
+ 115, 122, 86
};
-static const int lexer_goto_row212[] = {
+static const int lexer_goto_row210[] = {
3,
48, 106, -177,
- 107, 107, 265,
- 108, 122, 85
+ 107, 107, 261,
+ 108, 122, 86
};
-static const int lexer_goto_row213[] = {
+static const int lexer_goto_row211[] = {
3,
- 48, 114, -90,
- 115, 115, 266,
- 116, 122, 85
+ 48, 114, -91,
+ 115, 115, 262,
+ 116, 122, 86
};
-static const int lexer_goto_row214[] = {
+static const int lexer_goto_row212[] = {
3,
- 48, 104, -103,
- 105, 105, 267,
- 106, 122, 85
+ 48, 104, -104,
+ 105, 105, 263,
+ 106, 122, 86
};
-static const int lexer_goto_row215[] = {
+static const int lexer_goto_row213[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row216[] = {
+static const int lexer_goto_row214[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row217[] = {
+static const int lexer_goto_row215[] = {
3,
48, 113, -33,
- 114, 114, 268,
- 115, 122, 85
+ 114, 114, 264,
+ 115, 122, 86
};
-static const int lexer_goto_row218[] = {
+static const int lexer_goto_row216[] = {
3,
48, 100, -42,
- 101, 101, 269,
- 102, 122, 85
+ 101, 101, 265,
+ 102, 122, 86
};
-static const int lexer_goto_row219[] = {
+static const int lexer_goto_row217[] = {
3,
- 48, 104, -103,
- 105, 105, 270,
- 106, 122, 85
+ 48, 104, -104,
+ 105, 105, 266,
+ 106, 122, 86
};
-static const int lexer_goto_row220[] = {
+static const int lexer_goto_row218[] = {
3,
48, 113, -33,
- 114, 114, 271,
- 115, 122, 85
+ 114, 114, 267,
+ 115, 122, 86
};
-static const int lexer_goto_row221[] = {
+static const int lexer_goto_row219[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row222[] = {
+static const int lexer_goto_row220[] = {
3,
48, 113, -33,
- 114, 114, 272,
- 115, 122, 85
+ 114, 114, 268,
+ 115, 122, 86
};
-static const int lexer_goto_row223[] = {
+static const int lexer_goto_row221[] = {
3,
- 48, 116, -120,
- 117, 117, 273,
- 118, 122, 85
+ 48, 116, -121,
+ 117, 117, 269,
+ 118, 122, 86
};
-static const int lexer_goto_row224[] = {
+static const int lexer_goto_row222[] = {
3,
- 48, 115, -97,
- 116, 116, 274,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 270,
+ 117, 122, 86
};
-static const int lexer_goto_row225[] = {
+static const int lexer_goto_row223[] = {
3,
48, 107, -34,
- 108, 108, 275,
- 109, 122, 85
+ 108, 108, 271,
+ 109, 122, 86
};
-static const int lexer_goto_row226[] = {
+static const int lexer_goto_row224[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row227[] = {
+static const int lexer_goto_row225[] = {
3,
48, 107, -34,
- 108, 108, 276,
- 109, 122, 85
+ 108, 108, 272,
+ 109, 122, 86
};
-static const int lexer_goto_row228[] = {
+static const int lexer_goto_row226[] = {
3,
48, 95, -32,
- 97, 97, 277,
- 98, 122, 85
+ 97, 97, 273,
+ 98, 122, 86
};
-static const int lexer_goto_row229[] = {
+static const int lexer_goto_row227[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row230[] = {
+static const int lexer_goto_row228[] = {
3,
48, 95, -32,
- 97, 97, 278,
- 98, 122, 85
+ 97, 97, 274,
+ 98, 122, 86
};
-static const int lexer_goto_row231[] = {
+static const int lexer_goto_row229[] = {
3,
48, 95, -32,
- 97, 97, 279,
- 98, 122, 85
+ 97, 97, 275,
+ 98, 122, 86
};
-static const int lexer_goto_row232[] = {
+static const int lexer_goto_row230[] = {
3,
48, 100, -42,
- 101, 101, 280,
- 102, 122, 85
-};
-static const int lexer_goto_row233[] = {
- 3,
- 48, 104, -103,
- 105, 105, 281,
- 106, 122, 85
+ 101, 101, 276,
+ 102, 122, 86
};
-static const int lexer_goto_row234[] = {
+static const int lexer_goto_row231[] = {
3,
- 48, 95, -32,
- 97, 97, 282,
- 98, 122, 85
+ 48, 104, -104,
+ 105, 105, 277,
+ 106, 122, 86
};
-static const int lexer_goto_row235[] = {
+static const int lexer_goto_row232[] = {
3,
48, 101, -39,
- 102, 102, 283,
- 103, 122, 85
+ 102, 102, 278,
+ 103, 122, 86
};
-static const int lexer_goto_row236[] = {
+static const int lexer_goto_row233[] = {
3,
48, 113, -33,
- 114, 114, 284,
- 115, 122, 85
+ 114, 114, 279,
+ 115, 122, 86
};
-static const int lexer_goto_row237[] = {
+static const int lexer_goto_row234[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row238[] = {
+static const int lexer_goto_row235[] = {
3,
48, 113, -33,
- 114, 114, 285,
- 115, 122, 85
+ 114, 114, 280,
+ 115, 122, 86
};
-static const int lexer_goto_row239[] = {
+static const int lexer_goto_row236[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row240[] = {
+static const int lexer_goto_row237[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row241[] = {
+static const int lexer_goto_row238[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row242[] = {
+static const int lexer_goto_row239[] = {
3,
48, 100, -42,
- 101, 101, 286,
- 102, 122, 85
+ 101, 101, 281,
+ 102, 122, 86
};
-static const int lexer_goto_row243[] = {
+static const int lexer_goto_row240[] = {
3,
48, 100, -42,
- 101, 101, 287,
- 102, 122, 85
-};
-static const int lexer_goto_row244[] = {
- 3,
- 48, 95, -32,
- 97, 97, 288,
- 98, 122, 85
+ 101, 101, 282,
+ 102, 122, 86
};
-static const int lexer_goto_row245[] = {
+static const int lexer_goto_row241[] = {
1,
- 0, 255, -194
+ 0, 255, -192
};
-static const int lexer_goto_row246[] = {
+static const int lexer_goto_row242[] = {
11,
- 0, 9, 289,
- 10, 10, 245,
- 11, 12, 289,
- 13, 13, 246,
- 14, 33, 289,
- 34, 34, 290,
- 35, 91, 289,
- 92, 92, 291,
- 93, 122, 289,
- 123, 123, 292,
- 124, 255, 289
+ 0, 9, 283,
+ 10, 10, 241,
+ 11, 12, 283,
+ 13, 13, 242,
+ 14, 33, 283,
+ 34, 34, 284,
+ 35, 91, 283,
+ 92, 92, 285,
+ 93, 122, 283,
+ 123, 123, 286,
+ 124, 255, 283
};
-static const int lexer_goto_row247[] = {
+static const int lexer_goto_row243[] = {
1,
- 0, 255, -247
+ 0, 255, -243
};
-static const int lexer_goto_row248[] = {
+static const int lexer_goto_row244[] = {
5,
- 0, 33, -247,
- 34, 34, 293,
- 35, 122, -247,
- 123, 123, 294,
- 124, 255, 289
+ 0, 33, -243,
+ 34, 34, 287,
+ 35, 122, -243,
+ 123, 123, 288,
+ 124, 255, 283
};
-static const int lexer_goto_row249[] = {
+static const int lexer_goto_row245[] = {
3,
- 0, 9, 295,
- 11, 12, 295,
- 14, 255, 295
+ 0, 9, 289,
+ 11, 12, 289,
+ 14, 255, 289
};
-static const int lexer_goto_row250[] = {
+static const int lexer_goto_row246[] = {
5,
- 0, 33, -247,
- 34, 34, 296,
- 35, 122, -247,
- 123, 123, 297,
- 124, 255, 289
+ 0, 33, -243,
+ 34, 34, 290,
+ 35, 122, -243,
+ 123, 123, 291,
+ 124, 255, 283
};
-static const int lexer_goto_row251[] = {
+static const int lexer_goto_row247[] = {
3,
0, 33, -132,
- 34, 34, 298,
- 35, 255, -198
+ 34, 34, 292,
+ 35, 255, -196
};
-static const int lexer_goto_row252[] = {
+static const int lexer_goto_row248[] = {
3,
- 0, 122, -200,
- 123, 123, 299,
- 124, 255, 193
+ 0, 122, -198,
+ 123, 123, 293,
+ 124, 255, 191
};
-static const int lexer_goto_row253[] = {
+static const int lexer_goto_row249[] = {
1,
0, 255, -132
};
-static const int lexer_goto_row254[] = {
+static const int lexer_goto_row250[] = {
3,
0, 33, -132,
- 34, 34, 300,
- 35, 255, -198
+ 34, 34, 294,
+ 35, 255, -196
};
-static const int lexer_goto_row255[] = {
+static const int lexer_goto_row251[] = {
3,
- 0, 122, -200,
- 123, 123, 301,
- 124, 255, 193
+ 0, 122, -198,
+ 123, 123, 295,
+ 124, 255, 191
};
-static const int lexer_goto_row256[] = {
+static const int lexer_goto_row252[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row257[] = {
+static const int lexer_goto_row253[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row258[] = {
+static const int lexer_goto_row254[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row259[] = {
+static const int lexer_goto_row255[] = {
9,
- 0, 9, 302,
- 10, 10, 303,
- 11, 12, 302,
- 13, 13, 304,
- 14, 38, 302,
- 39, 39, 305,
- 40, 91, 302,
- 92, 92, 306,
- 93, 255, 302
+ 0, 9, 296,
+ 10, 10, 297,
+ 11, 12, 296,
+ 13, 13, 298,
+ 14, 38, 296,
+ 39, 39, 299,
+ 40, 91, 296,
+ 92, 92, 300,
+ 93, 255, 296
};
-static const int lexer_goto_row260[] = {
+static const int lexer_goto_row256[] = {
3,
- 0, 9, 307,
- 11, 12, 307,
- 14, 255, 307
+ 0, 9, 301,
+ 11, 12, 301,
+ 14, 255, 301
};
-static const int lexer_goto_row261[] = {
+static const int lexer_goto_row257[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row262[] = {
+static const int lexer_goto_row258[] = {
1,
- 117, 117, 308
+ 117, 117, 302
};
-static const int lexer_goto_row263[] = {
+static const int lexer_goto_row259[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row264[] = {
+static const int lexer_goto_row260[] = {
3,
48, 95, -32,
- 97, 97, 309,
- 98, 122, 85
+ 97, 97, 303,
+ 98, 122, 86
};
-static const int lexer_goto_row265[] = {
+static const int lexer_goto_row261[] = {
3,
- 48, 115, -97,
- 116, 116, 310,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 304,
+ 117, 122, 86
};
-static const int lexer_goto_row266[] = {
+static const int lexer_goto_row262[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row267[] = {
+static const int lexer_goto_row263[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row268[] = {
+static const int lexer_goto_row264[] = {
3,
48, 109, -43,
- 110, 110, 311,
- 111, 122, 85
+ 110, 110, 305,
+ 111, 122, 86
};
-static const int lexer_goto_row269[] = {
+static const int lexer_goto_row265[] = {
3,
48, 109, -43,
- 110, 110, 312,
- 111, 122, 85
+ 110, 110, 306,
+ 111, 122, 86
};
-static const int lexer_goto_row270[] = {
+static const int lexer_goto_row266[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row271[] = {
+static const int lexer_goto_row267[] = {
3,
48, 100, -42,
- 101, 101, 313,
- 102, 122, 85
+ 101, 101, 307,
+ 102, 122, 86
};
-static const int lexer_goto_row272[] = {
+static const int lexer_goto_row268[] = {
3,
- 48, 115, -97,
- 116, 116, 314,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 308,
+ 117, 122, 86
};
-static const int lexer_goto_row273[] = {
- 5,
+static const int lexer_goto_row269[] = {
+ 3,
48, 101, -39,
- 102, 102, 315,
- 103, 109, 85,
- 110, 110, 316,
- 111, 122, 85
+ 102, 102, 309,
+ 103, 122, 86
};
-static const int lexer_goto_row274[] = {
+static const int lexer_goto_row270[] = {
3,
- 48, 99, -89,
- 100, 100, 317,
- 101, 122, 85
+ 48, 99, -90,
+ 100, 100, 310,
+ 101, 122, 86
};
-static const int lexer_goto_row275[] = {
+static const int lexer_goto_row271[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row276[] = {
+static const int lexer_goto_row272[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row277[] = {
+static const int lexer_goto_row273[] = {
3,
48, 100, -42,
- 101, 101, 318,
- 102, 122, 85
+ 101, 101, 311,
+ 102, 122, 86
};
-static const int lexer_goto_row278[] = {
+static const int lexer_goto_row274[] = {
3,
48, 97, -32,
- 98, 98, 319,
- 99, 122, 85
+ 98, 98, 312,
+ 99, 122, 86
};
-static const int lexer_goto_row279[] = {
+static const int lexer_goto_row275[] = {
4,
48, 95, -32,
- 97, 102, 85,
- 103, 103, 320,
- 104, 122, 85
-};
-static const int lexer_goto_row280[] = {
- 3,
- 48, 115, -97,
- 116, 116, 321,
- 117, 122, 85
+ 97, 102, 86,
+ 103, 103, 313,
+ 104, 122, 86
};
-static const int lexer_goto_row281[] = {
+static const int lexer_goto_row276[] = {
3,
- 48, 98, -111,
- 99, 99, 322,
- 100, 122, 85
+ 48, 115, -98,
+ 116, 116, 314,
+ 117, 122, 86
};
-static const int lexer_goto_row282[] = {
+static const int lexer_goto_row277[] = {
3,
- 48, 98, -111,
- 99, 99, 323,
- 100, 122, 85
+ 48, 98, -112,
+ 99, 99, 315,
+ 100, 122, 86
};
-static const int lexer_goto_row283[] = {
+static const int lexer_goto_row278[] = {
3,
- 48, 97, -32,
- 98, 98, 324,
- 99, 122, 85
+ 48, 98, -112,
+ 99, 99, 316,
+ 100, 122, 86
};
-static const int lexer_goto_row284[] = {
+static const int lexer_goto_row279[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row285[] = {
+static const int lexer_goto_row280[] = {
3,
48, 109, -43,
- 110, 110, 325,
- 111, 122, 85
+ 110, 110, 317,
+ 111, 122, 86
};
-static const int lexer_goto_row286[] = {
+static const int lexer_goto_row281[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row287[] = {
+static const int lexer_goto_row282[] = {
3,
48, 113, -33,
- 114, 114, 326,
- 115, 122, 85
+ 114, 114, 318,
+ 115, 122, 86
};
-static const int lexer_goto_row288[] = {
+static const int lexer_goto_row283[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row289[] = {
- 3,
- 48, 97, -32,
- 98, 98, 327,
- 99, 122, 85
-};
-static const int lexer_goto_row290[] = {
+static const int lexer_goto_row284[] = {
1,
- 0, 255, -247
+ 0, 255, -243
};
-static const int lexer_goto_row291[] = {
+static const int lexer_goto_row285[] = {
1,
- 0, 255, -249
+ 0, 255, -245
};
-static const int lexer_goto_row292[] = {
+static const int lexer_goto_row286[] = {
3,
- 0, 9, 328,
- 11, 12, 328,
- 14, 255, 328
+ 0, 9, 319,
+ 11, 12, 319,
+ 14, 255, 319
};
-static const int lexer_goto_row293[] = {
+static const int lexer_goto_row287[] = {
1,
- 0, 255, -251
+ 0, 255, -247
};
-static const int lexer_goto_row294[] = {
+static const int lexer_goto_row288[] = {
3,
- 0, 33, -247,
- 34, 34, 329,
- 35, 255, -249
+ 0, 33, -243,
+ 34, 34, 320,
+ 35, 255, -245
};
-static const int lexer_goto_row295[] = {
+static const int lexer_goto_row289[] = {
3,
- 0, 122, -251,
- 123, 123, 330,
- 124, 255, 289
+ 0, 122, -247,
+ 123, 123, 321,
+ 124, 255, 283
};
-static const int lexer_goto_row296[] = {
+static const int lexer_goto_row290[] = {
1,
- 0, 255, -194
+ 0, 255, -192
};
-static const int lexer_goto_row297[] = {
+static const int lexer_goto_row291[] = {
3,
- 0, 33, -247,
- 34, 34, 331,
- 35, 255, -249
+ 0, 33, -243,
+ 34, 34, 322,
+ 35, 255, -245
};
-static const int lexer_goto_row298[] = {
+static const int lexer_goto_row292[] = {
3,
- 0, 122, -251,
- 123, 123, 332,
- 124, 255, 289
+ 0, 122, -247,
+ 123, 123, 323,
+ 124, 255, 283
};
-static const int lexer_goto_row299[] = {
+static const int lexer_goto_row293[] = {
1,
- 34, 34, 333
+ 34, 34, 324
};
-static const int lexer_goto_row300[] = {
+static const int lexer_goto_row294[] = {
1,
- 0, 255, -256
+ 0, 255, -252
};
-static const int lexer_goto_row301[] = {
+static const int lexer_goto_row295[] = {
1,
- 0, 255, -252
+ 0, 255, -248
};
-static const int lexer_goto_row302[] = {
+static const int lexer_goto_row296[] = {
1,
- 123, 123, 334
+ 123, 123, 325
};
-static const int lexer_goto_row303[] = {
+static const int lexer_goto_row297[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row304[] = {
+static const int lexer_goto_row298[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row305[] = {
+static const int lexer_goto_row299[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row307[] = {
+static const int lexer_goto_row301[] = {
3,
- 0, 9, 335,
- 11, 12, 335,
- 14, 255, 335
+ 0, 9, 326,
+ 11, 12, 326,
+ 14, 255, 326
};
-static const int lexer_goto_row308[] = {
+static const int lexer_goto_row302[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row309[] = {
+static const int lexer_goto_row303[] = {
1,
- 103, 103, 336
+ 103, 103, 327
};
-static const int lexer_goto_row310[] = {
+static const int lexer_goto_row304[] = {
3,
- 48, 98, -111,
- 99, 99, 337,
- 100, 122, 85
+ 48, 98, -112,
+ 99, 99, 328,
+ 100, 122, 86
};
-static const int lexer_goto_row311[] = {
+static const int lexer_goto_row305[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row312[] = {
+static const int lexer_goto_row306[] = {
3,
- 48, 116, -120,
- 117, 117, 338,
- 118, 122, 85
+ 48, 116, -121,
+ 117, 117, 329,
+ 118, 122, 86
};
-static const int lexer_goto_row313[] = {
+static const int lexer_goto_row307[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row314[] = {
+static const int lexer_goto_row308[] = {
3,
- 48, 114, -90,
- 115, 115, 339,
- 116, 122, 85
+ 48, 114, -91,
+ 115, 115, 330,
+ 116, 122, 86
};
-static const int lexer_goto_row315[] = {
+static const int lexer_goto_row309[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row316[] = {
+static const int lexer_goto_row310[] = {
3,
48, 95, -32,
- 97, 97, 340,
- 98, 122, 85
-};
-static const int lexer_goto_row317[] = {
- 1,
- 48, 122, -38
+ 97, 97, 331,
+ 98, 122, 86
};
-static const int lexer_goto_row318[] = {
+static const int lexer_goto_row311[] = {
3,
48, 100, -42,
- 101, 101, 341,
- 102, 122, 85
+ 101, 101, 332,
+ 102, 122, 86
};
-static const int lexer_goto_row319[] = {
+static const int lexer_goto_row312[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row320[] = {
+static const int lexer_goto_row313[] = {
3,
48, 107, -34,
- 108, 108, 342,
- 109, 122, 85
+ 108, 108, 333,
+ 109, 122, 86
};
-static const int lexer_goto_row321[] = {
+static const int lexer_goto_row314[] = {
3,
48, 100, -42,
- 101, 101, 343,
- 102, 122, 85
+ 101, 101, 334,
+ 102, 122, 86
};
-static const int lexer_goto_row322[] = {
+static const int lexer_goto_row315[] = {
3,
48, 100, -42,
- 101, 101, 344,
- 102, 122, 85
+ 101, 101, 335,
+ 102, 122, 86
};
-static const int lexer_goto_row323[] = {
+static const int lexer_goto_row316[] = {
3,
- 48, 115, -97,
- 116, 116, 345,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 336,
+ 117, 122, 86
};
-static const int lexer_goto_row324[] = {
+static const int lexer_goto_row317[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row325[] = {
- 3,
- 48, 107, -34,
- 108, 108, 346,
- 109, 122, 85
-};
-static const int lexer_goto_row326[] = {
+static const int lexer_goto_row318[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row327[] = {
- 3,
- 48, 114, -90,
- 115, 115, 347,
- 116, 122, 85
-};
-static const int lexer_goto_row328[] = {
+static const int lexer_goto_row319[] = {
3,
- 48, 107, -34,
- 108, 108, 348,
- 109, 122, 85
+ 48, 114, -91,
+ 115, 115, 337,
+ 116, 122, 86
};
-static const int lexer_goto_row329[] = {
+static const int lexer_goto_row320[] = {
1,
- 0, 255, -247
+ 0, 255, -243
};
-static const int lexer_goto_row330[] = {
+static const int lexer_goto_row321[] = {
1,
- 34, 34, 349
+ 34, 34, 338
};
-static const int lexer_goto_row331[] = {
+static const int lexer_goto_row322[] = {
1,
- 0, 255, -299
+ 0, 255, -293
};
-static const int lexer_goto_row332[] = {
+static const int lexer_goto_row323[] = {
1,
- 0, 255, -295
+ 0, 255, -289
};
-static const int lexer_goto_row333[] = {
+static const int lexer_goto_row324[] = {
1,
- 123, 123, 350
+ 123, 123, 339
};
-static const int lexer_goto_row334[] = {
+static const int lexer_goto_row325[] = {
1,
- 34, 34, 333
+ 34, 34, 324
};
-static const int lexer_goto_row335[] = {
+static const int lexer_goto_row326[] = {
1,
- 123, 123, 334
+ 123, 123, 325
};
-static const int lexer_goto_row336[] = {
+static const int lexer_goto_row327[] = {
1,
0, 255, -136
};
-static const int lexer_goto_row337[] = {
+static const int lexer_goto_row328[] = {
1,
- 95, 95, 351
+ 95, 95, 340
};
-static const int lexer_goto_row338[] = {
+static const int lexer_goto_row329[] = {
3,
- 48, 115, -97,
- 116, 116, 352,
- 117, 122, 85
+ 48, 115, -98,
+ 116, 116, 341,
+ 117, 122, 86
};
-static const int lexer_goto_row339[] = {
+static const int lexer_goto_row330[] = {
3,
48, 100, -42,
- 101, 101, 353,
- 102, 122, 85
+ 101, 101, 342,
+ 102, 122, 86
};
-static const int lexer_goto_row340[] = {
+static const int lexer_goto_row331[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row341[] = {
+static const int lexer_goto_row332[] = {
3,
- 48, 98, -111,
- 99, 99, 354,
- 100, 122, 85
+ 48, 98, -112,
+ 99, 99, 343,
+ 100, 122, 86
};
-static const int lexer_goto_row342[] = {
+static const int lexer_goto_row333[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row343[] = {
+static const int lexer_goto_row334[] = {
3,
48, 100, -42,
- 101, 101, 355,
- 102, 122, 85
+ 101, 101, 344,
+ 102, 122, 86
};
-static const int lexer_goto_row344[] = {
+static const int lexer_goto_row335[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row345[] = {
+static const int lexer_goto_row336[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row346[] = {
- 3,
- 48, 100, -42,
- 101, 101, 356,
- 102, 122, 85
-};
-static const int lexer_goto_row347[] = {
+static const int lexer_goto_row337[] = {
3,
48, 100, -42,
- 101, 101, 357,
- 102, 122, 85
+ 101, 101, 345,
+ 102, 122, 86
};
-static const int lexer_goto_row348[] = {
+static const int lexer_goto_row338[] = {
3,
48, 95, -32,
- 97, 97, 358,
- 98, 122, 85
-};
-static const int lexer_goto_row349[] = {
- 3,
- 48, 100, -42,
- 101, 101, 359,
- 102, 122, 85
+ 97, 97, 346,
+ 98, 122, 86
};
-static const int lexer_goto_row350[] = {
+static const int lexer_goto_row339[] = {
1,
- 34, 34, 349
+ 34, 34, 338
};
-static const int lexer_goto_row351[] = {
+static const int lexer_goto_row340[] = {
1,
- 123, 123, 350
+ 123, 123, 339
};
-static const int lexer_goto_row352[] = {
+static const int lexer_goto_row341[] = {
1,
- 95, 95, 360
+ 95, 95, 347
};
-static const int lexer_goto_row353[] = {
+static const int lexer_goto_row342[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row354[] = {
+static const int lexer_goto_row343[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row355[] = {
+static const int lexer_goto_row344[] = {
3,
48, 100, -42,
- 101, 101, 361,
- 102, 122, 85
+ 101, 101, 348,
+ 102, 122, 86
};
-static const int lexer_goto_row356[] = {
+static const int lexer_goto_row345[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row357[] = {
+static const int lexer_goto_row346[] = {
3,
- 48, 99, -89,
- 100, 100, 362,
- 101, 122, 85
-};
-static const int lexer_goto_row358[] = {
- 1,
- 48, 122, -38
+ 48, 99, -90,
+ 100, 100, 349,
+ 101, 122, 86
};
-static const int lexer_goto_row359[] = {
+static const int lexer_goto_row347[] = {
3,
48, 107, -34,
- 108, 108, 363,
- 109, 122, 85
-};
-static const int lexer_goto_row360[] = {
- 1,
- 48, 122, -38
+ 108, 108, 350,
+ 109, 122, 86
};
-static const int lexer_goto_row362[] = {
+static const int lexer_goto_row349[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row363[] = {
+static const int lexer_goto_row350[] = {
1,
48, 122, -38
};
-static const int lexer_goto_row364[] = {
+static const int lexer_goto_row351[] = {
1,
48, 122, -38
};
lexer_goto_row10,
lexer_goto_row_null,
lexer_goto_row_null,
- lexer_goto_row_null,
+ lexer_goto_row13,
lexer_goto_row14,
lexer_goto_row_null,
lexer_goto_row16,
lexer_goto_row62,
lexer_goto_row_null,
lexer_goto_row_null,
- lexer_goto_row65,
+ lexer_goto_row_null,
lexer_goto_row66,
lexer_goto_row67,
lexer_goto_row68,
lexer_goto_row69,
+ lexer_goto_row70,
lexer_goto_row_null,
lexer_goto_row_null,
- lexer_goto_row72,
+ lexer_goto_row73,
lexer_goto_row_null,
lexer_goto_row_null,
lexer_goto_row_null,
- lexer_goto_row76,
lexer_goto_row77,
lexer_goto_row78,
lexer_goto_row79,
lexer_goto_row200,
lexer_goto_row201,
lexer_goto_row202,
- lexer_goto_row203,
+ lexer_goto_row_null,
lexer_goto_row204,
+ lexer_goto_row205,
lexer_goto_row_null,
- lexer_goto_row206,
lexer_goto_row207,
- lexer_goto_row_null,
+ lexer_goto_row208,
lexer_goto_row209,
lexer_goto_row210,
lexer_goto_row211,
lexer_goto_row297,
lexer_goto_row298,
lexer_goto_row299,
- lexer_goto_row300,
+ lexer_goto_row_null,
lexer_goto_row301,
lexer_goto_row302,
lexer_goto_row303,
lexer_goto_row304,
lexer_goto_row305,
- lexer_goto_row_null,
+ lexer_goto_row306,
lexer_goto_row307,
lexer_goto_row308,
lexer_goto_row309,
lexer_goto_row345,
lexer_goto_row346,
lexer_goto_row347,
- lexer_goto_row348,
+ lexer_goto_row_null,
lexer_goto_row349,
lexer_goto_row350,
- lexer_goto_row351,
- lexer_goto_row352,
- lexer_goto_row353,
- lexer_goto_row354,
- lexer_goto_row355,
- lexer_goto_row356,
- lexer_goto_row357,
- lexer_goto_row358,
- lexer_goto_row359,
- lexer_goto_row360,
- lexer_goto_row_null,
- lexer_goto_row362,
- lexer_goto_row363,
- lexer_goto_row364
+ lexer_goto_row351
};
const int lexer_accept_table[] = {
- -1,0,1,1,0,82,95,2,72,-1,55,56,70,68,59,69,67,71,87,87,60,75,62,78,83,84,57,58,-1,-1,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,95,1,74,95,90,-1,91,2,2,2,96,96,96,63,64,66,89,-1,-1,-1,61,77,76,73,79,80,84,84,84,84,-1,86,-1,85,85,85,85,85,85,50,85,85,85,16,85,85,85,85,85,85,26,85,32,15,85,85,85,85,85,85,85,34,85,85,85,85,85,85,85,85,85,85,85,85,85,95,93,-1,92,95,90,95,95,2,94,95,96,65,88,88,88,81,-1,86,86,86,86,-1,-1,-1,85,85,33,85,85,85,85,85,10,85,85,85,31,11,85,85,85,43,85,85,85,85,42,35,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,19,85,85,95,95,95,95,95,-1,-1,-1,95,95,95,-1,-1,94,-1,-1,97,85,85,85,85,85,85,28,9,85,85,85,85,13,85,85,85,85,30,85,49,44,85,85,85,85,85,85,85,46,85,27,47,12,85,85,85,95,-1,-1,93,-1,92,-1,-1,95,-1,-1,95,95,95,-1,-1,95,-1,40,85,85,39,6,85,85,48,85,85,85,85,52,53,85,85,85,85,85,85,85,14,85,45,85,29,85,-1,-1,-1,-1,-1,-1,95,-1,-1,90,-1,-1,91,95,95,95,90,-1,95,-1,85,41,85,21,85,5,85,20,85,4,85,85,85,85,22,85,37,85,85,-1,93,-1,-1,92,90,91,95,-1,85,85,36,85,25,85,3,24,85,85,85,85,93,92,-1,7,38,85,51,85,17,85,18,54,8,23,9
+ -1,0,1,1,0,80,93,2,70,-1,52,53,67,65,56,66,64,69,85,85,57,73,59,76,81,82,54,55,-1,-1,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,93,1,72,93,88,-1,89,2,2,2,94,94,94,68,60,61,63,87,-1,-1,-1,58,75,74,71,77,78,82,82,82,82,-1,84,-1,83,83,83,83,83,83,47,83,83,83,16,83,83,83,83,83,83,23,83,29,15,83,83,83,83,83,83,83,31,83,83,83,83,83,83,83,83,83,83,83,83,93,91,-1,90,93,88,93,93,2,92,93,94,62,86,86,86,79,-1,84,84,84,84,-1,-1,-1,83,83,30,83,83,83,83,83,10,83,83,83,28,11,83,83,83,40,83,83,83,83,39,32,83,83,83,83,83,83,83,83,83,83,83,83,83,83,17,83,93,93,93,93,93,-1,-1,-1,93,93,93,-1,-1,92,-1,-1,95,83,83,83,83,83,83,25,9,83,83,83,83,13,83,83,83,83,27,83,46,41,83,83,83,83,83,83,43,83,24,44,12,83,83,93,-1,-1,91,-1,90,-1,-1,93,-1,-1,93,93,93,-1,-1,93,-1,37,83,83,36,6,83,83,45,83,83,83,83,49,50,83,83,83,83,83,83,14,83,42,83,26,-1,-1,-1,-1,-1,-1,93,-1,-1,88,-1,-1,89,93,93,93,88,-1,93,-1,83,38,83,18,83,5,83,83,4,83,83,83,83,19,34,83,-1,91,-1,-1,90,88,89,93,-1,83,83,33,83,22,83,3,21,83,83,91,90,-1,7,35,83,48,83,83,51,8,20,9
};
static int parser_action_row1[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
static int parser_action_row2[] = {
1,
static int parser_action_row4[] = {
2,
-1, 3, 3,
- 97, 2, -1
+ 95, 2, -1
};
static int parser_action_row5[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
static int parser_action_row6[] = {
1,
};
static int parser_action_row12[] = {
2,
- -1, 1, 386,
- 97, 1, 23
+ -1, 1, 377,
+ 95, 1, 23
};
static int parser_action_row13[] = {
34,
12, 0, 26,
13, 0, 27,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 31, 0, 34,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55,
- 96, 0, 56
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 28, 0, 34,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55,
+ 94, 0, 56
};
static int parser_action_row14[] = {
2,
- -1, 1, 384,
+ -1, 1, 375,
1, 0, 2
};
static int parser_action_row15[] = {
static int parser_action_row16[] = {
3,
-1, 3, 15,
- 0, 0, 82,
- 1, 0, 83
+ 0, 0, 83,
+ 1, 0, 84
};
static int parser_action_row17[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
static int parser_action_row18[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
static int parser_action_row19[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
static int parser_action_row20[] = {
3,
- -1, 1, 382,
+ -1, 1, 373,
0, 0, 1,
- 1, 0, 96
+ 1, 0, 97
};
static int parser_action_row21[] = {
2,
- -1, 1, 389,
- 0, 0, 98
+ -1, 1, 380,
+ 0, 0, 99
};
static int parser_action_row22[] = {
1,
12, 0, 26,
13, 0, 27,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 31, 0, 34,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55,
- 96, 0, 56
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 28, 0, 34,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55,
+ 94, 0, 56
};
static int parser_action_row24[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
static int parser_action_row25[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
static int parser_action_row26[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
static int parser_action_row27[] = {
26,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 56, 1, 349,
- 64, 1, 349,
- 66, 1, 349,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 53, 1, 340,
+ 61, 1, 340,
+ 63, 1, 340,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row28[] = {
1,
};
static int parser_action_row29[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 139,
+ 9, 0, 142,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row30[] = {
2,
-1, 3, 29,
- 84, 0, 144
+ 82, 0, 147
};
static int parser_action_row31[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row32[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row33[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 139,
+ 9, 0, 142,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row34[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row35[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row36[] = {
24,
- -1, 1, 180,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 164,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row37[] = {
2,
- -1, 1, 185,
- 52, 0, 171
+ -1, 1, 169,
+ 49, 0, 175
};
static int parser_action_row38[] = {
2,
- -1, 1, 182,
- 52, 0, 171
+ -1, 1, 166,
+ 49, 0, 175
};
static int parser_action_row39[] = {
1,
- -1, 1, 184
+ -1, 1, 168
};
static int parser_action_row40[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 174,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 178,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row41[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row42[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row43[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row44[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row45[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row46[] = {
2,
-1, 3, 45,
- 11, 0, 186
+ 11, 0, 190
};
static int parser_action_row47[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row48[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row49[] = {
2,
-1, 3, 48,
- 60, 0, 189
+ 57, 0, 193
};
static int parser_action_row50[] = {
2,
- -1, 1, 368,
- 60, 0, 190
+ -1, 1, 359,
+ 57, 0, 194
};
static int parser_action_row51[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row52[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row53[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row54[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row55[] = {
1,
- -1, 1, 311
+ -1, 1, 298
};
static int parser_action_row56[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row57[] = {
1,
- -1, 1, 152
+ -1, 1, 136
};
static int parser_action_row58[] = {
5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
+ -1, 1, 80,
+ 18, 0, 200,
+ 19, 0, 201,
+ 20, 0, 202,
+ 21, 0, 203
};
static int parser_action_row59[] = {
2,
-1, 3, 58,
- 96, 0, 201
+ 94, 0, 205
};
static int parser_action_row60[] = {
1,
- -1, 1, 156
+ -1, 1, 140
};
static int parser_action_row61[] = {
1,
};
static int parser_action_row63[] = {
3,
- -1, 1, 171,
+ -1, 1, 155,
0, 0, 1,
1, 0, 2
};
static int parser_action_row64[] = {
1,
- -1, 1, 178
+ -1, 1, 162
};
static int parser_action_row65[] = {
1,
- -1, 1, 179
+ -1, 1, 163
};
static int parser_action_row66[] = {
1,
- -1, 1, 187
+ -1, 1, 171
};
static int parser_action_row67[] = {
1,
- -1, 1, 188
+ -1, 1, 172
};
static int parser_action_row68[] = {
1,
- -1, 1, 190
+ -1, 1, 174
};
static int parser_action_row69[] = {
1,
- -1, 1, 189
+ -1, 1, 173
};
static int parser_action_row70[] = {
1,
- -1, 1, 191
+ -1, 1, 175
};
static int parser_action_row71[] = {
1,
- -1, 1, 192
+ -1, 1, 176
};
static int parser_action_row72[] = {
4,
-1, 3, 71,
- 56, 0, 205,
- 64, 0, 206,
- 66, 0, 207
+ 53, 0, 209,
+ 61, 0, 210,
+ 63, 0, 211
};
static int parser_action_row73[] = {
1,
- -1, 1, 301
+ -1, 1, 266
};
static int parser_action_row74[] = {
- 3,
- -1, 3, 73,
- 91, 0, 209,
- 92, 0, 210
+ 1,
+ -1, 1, 289
};
static int parser_action_row75[] = {
3,
- -1, 1, 385,
+ -1, 3, 74,
+ 89, 0, 213,
+ 90, 0, 214
+};
+static int parser_action_row76[] = {
+ 3,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row76[] = {
+static int parser_action_row77[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row77[] = {
+static int parser_action_row78[] = {
3,
- -1, 3, 76,
- 44, 0, 217,
- 85, 0, 218
+ -1, 3, 77,
+ 41, 0, 221,
+ 83, 0, 222
};
-static int parser_action_row78[] = {
+static int parser_action_row79[] = {
29,
- -1, 1, 349,
- 0, 1, 353,
- 1, 1, 353,
- 9, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 55, 1, 353,
- 58, 1, 353,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122,
- 97, 1, 353
+ -1, 1, 340,
+ 0, 1, 344,
+ 1, 1, 344,
+ 9, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 52, 1, 344,
+ 55, 1, 344,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123,
+ 95, 1, 344
};
-static int parser_action_row79[] = {
+static int parser_action_row80[] = {
1,
-1, 1, 824
};
-static int parser_action_row80[] = {
+static int parser_action_row81[] = {
3,
- -1, 1, 364,
- 12, 0, 221,
- 84, 0, 222
+ -1, 1, 355,
+ 12, 0, 225,
+ 82, 0, 226
};
-static int parser_action_row81[] = {
+static int parser_action_row82[] = {
4,
- -1, 1, 366,
- 12, 0, 223,
- 83, 0, 48,
- 84, 0, 224
+ -1, 1, 357,
+ 12, 0, 227,
+ 81, 0, 48,
+ 82, 0, 228
};
-static int parser_action_row82[] = {
+static int parser_action_row83[] = {
3,
- -1, 1, 383,
+ -1, 1, 374,
0, 0, 1,
- 1, 0, 96
-};
-static int parser_action_row83[] = {
- 1,
- -1, 1, 381
+ 1, 0, 97
};
static int parser_action_row84[] = {
1,
- -1, 1, 380
+ -1, 1, 372
};
static int parser_action_row85[] = {
1,
- -1, 1, 390
+ -1, 1, 371
};
static int parser_action_row86[] = {
1,
- -1, 1, 793
+ -1, 1, 381
};
static int parser_action_row87[] = {
1,
- -1, 1, 2
+ -1, 1, 793
};
static int parser_action_row88[] = {
+ 1,
+ -1, 1, 2
+};
+static int parser_action_row89[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
-static int parser_action_row89[] = {
+static int parser_action_row90[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
-static int parser_action_row90[] = {
+static int parser_action_row91[] = {
1,
-1, 1, 4
};
-static int parser_action_row91[] = {
+static int parser_action_row92[] = {
1,
-1, 1, 795
};
-static int parser_action_row92[] = {
+static int parser_action_row93[] = {
34,
-1, 1, 42,
12, 0, 26,
13, 0, 27,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 31, 0, 34,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55,
- 96, 0, 56
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 28, 0, 34,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55,
+ 94, 0, 56
};
-static int parser_action_row93[] = {
+static int parser_action_row94[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
-static int parser_action_row94[] = {
+static int parser_action_row95[] = {
1,
-1, 1, 797
};
-static int parser_action_row95[] = {
+static int parser_action_row96[] = {
1,
-1, 1, 8
};
-static int parser_action_row96[] = {
+static int parser_action_row97[] = {
32,
-1, 1, 42,
12, 0, 26,
13, 0, 27,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row97[] = {
+static int parser_action_row98[] = {
1,
-1, 1, 827
};
-static int parser_action_row98[] = {
+static int parser_action_row99[] = {
2,
- -1, 1, 387,
- 0, 0, 98
+ -1, 1, 378,
+ 0, 0, 99
};
-static int parser_action_row99[] = {
+static int parser_action_row100[] = {
1,
-1, 1, 829
};
-static int parser_action_row100[] = {
+static int parser_action_row101[] = {
5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
+ -1, 1, 80,
+ 18, 0, 200,
+ 19, 0, 201,
+ 20, 0, 202,
+ 21, 0, 203
};
-static int parser_action_row101[] = {
+static int parser_action_row102[] = {
1,
-1, 1, 3
};
-static int parser_action_row102[] = {
+static int parser_action_row103[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
-static int parser_action_row103[] = {
+static int parser_action_row104[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
-static int parser_action_row104[] = {
+static int parser_action_row105[] = {
1,
-1, 1, 5
};
-static int parser_action_row105[] = {
+static int parser_action_row106[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
-static int parser_action_row106[] = {
+static int parser_action_row107[] = {
1,
-1, 1, 9
};
-static int parser_action_row107[] = {
- 2,
- -1, 1, 349,
- 54, 0, 238
-};
static int parser_action_row108[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 2,
+ -1, 1, 340,
+ 51, 0, 242
};
static int parser_action_row109[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row110[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row111[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row112[] = {
- 2,
- -1, 1, 319,
- 82, 0, 180
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row113[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row114[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row115[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row116[] = {
- 15,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 248,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ 2,
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row117[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 15,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 252,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row118[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row119[] = {
- 2,
- -1, 1, 319,
- 82, 0, 180
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row120[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row121[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row122[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row123[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row124[] = {
- 1,
- -1, 1, 554
+ 2,
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row125[] = {
1,
- -1, 1, 286
+ -1, 1, 553
};
static int parser_action_row126[] = {
1,
- -1, 1, 197
+ -1, 1, 273
};
static int parser_action_row127[] = {
- 3,
- -1, 3, 126,
- 44, 0, 258,
- 85, 0, 259
+ 1,
+ -1, 1, 181
};
static int parser_action_row128[] = {
- 2,
- -1, 1, 349,
- 54, 0, 238
+ 3,
+ -1, 3, 127,
+ 41, 0, 262,
+ 83, 0, 263
};
static int parser_action_row129[] = {
2,
- -1, 1, 364,
- 84, 0, 222
+ -1, 1, 340,
+ 51, 0, 242
};
static int parser_action_row130[] = {
- 1,
- -1, 1, 351
+ 2,
+ -1, 1, 355,
+ 82, 0, 226
};
static int parser_action_row131[] = {
- 4,
- -1, 1, 502,
- 32, 0, 261,
- 33, 0, 262,
- 35, 0, 263
+ 1,
+ -1, 1, 342
};
static int parser_action_row132[] = {
- 1,
- -1, 1, 504
+ 4,
+ -1, 1, 494,
+ 29, 0, 265,
+ 30, 0, 266,
+ 32, 0, 267
};
static int parser_action_row133[] = {
- 3,
- -1, 1, 509,
- 76, 0, 264,
- 79, 0, 265
+ 1,
+ -1, 1, 496
};
static int parser_action_row134[] = {
- 11,
- -1, 1, 511,
- 42, 0, 266,
- 67, 0, 267,
- 68, 0, 268,
- 72, 0, 269,
- 73, 0, 270,
- 74, 0, 271,
- 75, 0, 272,
- 77, 0, 273,
- 78, 0, 274,
- 80, 0, 275
+ 3,
+ -1, 1, 501,
+ 74, 0, 268,
+ 77, 0, 269
};
static int parser_action_row135[] = {
- 4,
- -1, 1, 522,
- 69, 0, 276,
- 70, 0, 277,
- 71, 0, 278
+ 11,
+ -1, 1, 503,
+ 39, 0, 270,
+ 64, 0, 271,
+ 65, 0, 272,
+ 70, 0, 273,
+ 71, 0, 274,
+ 72, 0, 275,
+ 73, 0, 276,
+ 75, 0, 277,
+ 76, 0, 278,
+ 78, 0, 279
};
static int parser_action_row136[] = {
- 1,
- -1, 1, 525
+ 4,
+ -1, 1, 514,
+ 66, 0, 280,
+ 68, 0, 281,
+ 69, 0, 282
};
static int parser_action_row137[] = {
1,
- -1, 1, 529
+ -1, 1, 517
};
static int parser_action_row138[] = {
- 4,
- -1, 1, 532,
- 56, 0, 205,
- 64, 0, 279,
- 66, 0, 280
+ 2,
+ -1, 1, 521,
+ 67, 0, 283
};
static int parser_action_row139[] = {
- 3,
- -1, 1, 366,
- 83, 0, 48,
- 84, 0, 224
+ 1,
+ -1, 1, 523
};
static int parser_action_row140[] = {
- 2,
- -1, 1, 169,
- 52, 1, 727
+ 4,
+ -1, 1, 526,
+ 53, 0, 209,
+ 61, 0, 284,
+ 63, 0, 285
};
static int parser_action_row141[] = {
1,
- -1, 1, 224
+ -1, 1, 530
};
static int parser_action_row142[] = {
- 1,
- -1, 1, 170
+ 3,
+ -1, 1, 357,
+ 81, 0, 48,
+ 82, 0, 228
};
static int parser_action_row143[] = {
- 30,
- -1, 1, 367,
- 9, 0, 283,
- 12, 0, 26,
- 15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 2,
+ -1, 1, 153,
+ 49, 1, 726
};
static int parser_action_row144[] = {
- 2,
- -1, 3, 143,
- 52, 0, 171
+ 1,
+ -1, 1, 208
};
static int parser_action_row145[] = {
- 3,
- -1, 1, 166,
- 59, 0, 287,
- 82, 0, 180
+ 1,
+ -1, 1, 154
};
static int parser_action_row146[] = {
- 1,
- -1, 1, 386
+ 30,
+ -1, 1, 358,
+ 9, 0, 288,
+ 12, 0, 26,
+ 15, 0, 28,
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row147[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 2,
+ -1, 3, 146,
+ 49, 0, 175
};
static int parser_action_row148[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 1, 150,
+ 56, 0, 292,
+ 80, 0, 184
};
static int parser_action_row149[] = {
1,
- -1, 1, 233
+ -1, 1, 377
};
static int parser_action_row150[] = {
- 2,
- -1, 3, 149,
- 52, 0, 171
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row151[] = {
- 3,
- -1, 3, 150,
- 54, 0, 293,
- 84, 0, 294
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row152[] = {
- 2,
- -1, 3, 151,
- 89, 0, 296
+ 1,
+ -1, 1, 217
};
static int parser_action_row153[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 3, 152,
+ 49, 0, 175
};
static int parser_action_row154[] = {
3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ -1, 3, 153,
+ 51, 0, 298,
+ 82, 0, 299
};
static int parser_action_row155[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 2,
+ -1, 3, 154,
+ 87, 0, 301
};
static int parser_action_row156[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 2,
+ -1, 1, 340,
+ 51, 0, 242
};
static int parser_action_row157[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row158[] = {
- 17,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row159[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row160[] = {
- 1,
- -1, 1, 181
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row161[] = {
- 1,
- -1, 1, 245
+ 17,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row162[] = {
- 4,
- -1, 1, 246,
- 32, 0, 304,
- 33, 0, 305,
- 35, 0, 306
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row163[] = {
1,
- -1, 1, 248
+ -1, 1, 165
};
static int parser_action_row164[] = {
- 3,
- -1, 1, 253,
- 76, 0, 307,
- 79, 0, 308
+ 1,
+ -1, 1, 229
};
static int parser_action_row165[] = {
- 11,
- -1, 1, 255,
- 42, 0, 309,
- 67, 0, 310,
- 68, 0, 311,
- 72, 0, 312,
- 73, 0, 313,
- 74, 0, 314,
- 75, 0, 315,
- 77, 0, 316,
- 78, 0, 317,
- 80, 0, 318
+ 4,
+ -1, 1, 230,
+ 29, 0, 309,
+ 30, 0, 310,
+ 32, 0, 311
};
static int parser_action_row166[] = {
- 4,
- -1, 1, 266,
- 69, 0, 319,
- 70, 0, 320,
- 71, 0, 321
+ 1,
+ -1, 1, 232
};
static int parser_action_row167[] = {
- 1,
- -1, 1, 269
+ 3,
+ -1, 1, 237,
+ 74, 0, 312,
+ 77, 0, 313
};
static int parser_action_row168[] = {
- 1,
- -1, 1, 273
+ 11,
+ -1, 1, 239,
+ 39, 0, 314,
+ 64, 0, 315,
+ 65, 0, 316,
+ 70, 0, 317,
+ 71, 0, 318,
+ 72, 0, 319,
+ 73, 0, 320,
+ 75, 0, 321,
+ 76, 0, 322,
+ 78, 0, 323
};
static int parser_action_row169[] = {
4,
- -1, 1, 276,
- 56, 0, 205,
- 64, 0, 206,
- 66, 0, 322
+ -1, 1, 250,
+ 66, 0, 324,
+ 68, 0, 325,
+ 69, 0, 326
};
static int parser_action_row170[] = {
- 3,
- -1, 3, 169,
- 44, 0, 324,
- 85, 0, 325
+ 1,
+ -1, 1, 253
};
static int parser_action_row171[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 257,
+ 67, 0, 327
};
static int parser_action_row172[] = {
- 2,
- -1, 1, 205,
- 84, 0, 327
+ 1,
+ -1, 1, 259
};
static int parser_action_row173[] = {
- 1,
- -1, 1, 186
+ 4,
+ -1, 1, 262,
+ 53, 0, 209,
+ 61, 0, 210,
+ 63, 0, 328
};
static int parser_action_row174[] = {
- 1,
- -1, 1, 183
+ 3,
+ -1, 3, 173,
+ 41, 0, 330,
+ 83, 0, 331
};
static int parser_action_row175[] = {
- 3,
- -1, 1, 368,
- 59, 0, 328,
- 60, 0, 190
+ 2,
+ -1, 1, 340,
+ 51, 0, 242
};
static int parser_action_row176[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 2,
+ -1, 1, 189,
+ 82, 0, 333
};
static int parser_action_row177[] = {
1,
- -1, 1, 242
+ -1, 1, 170
};
static int parser_action_row178[] = {
- 2,
- -1, 1, 245,
- 27, 1, 684
+ 1,
+ -1, 1, 167
};
static int parser_action_row179[] = {
- 2,
- -1, 3, 178,
- 27, 0, 331
+ 3,
+ -1, 1, 359,
+ 56, 0, 334,
+ 57, 0, 194
};
static int parser_action_row180[] = {
- 3,
- -1, 3, 179,
- 50, 0, 332,
- 83, 0, 333
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row181[] = {
+ 1,
+ -1, 1, 226
+};
+static int parser_action_row182[] = {
+ 2,
+ -1, 1, 229,
+ 24, 1, 683
+};
+static int parser_action_row183[] = {
+ 2,
+ -1, 3, 182,
+ 24, 0, 337
+};
+static int parser_action_row184[] = {
+ 3,
+ -1, 3, 183,
+ 47, 0, 338,
+ 81, 0, 339
+};
+static int parser_action_row185[] = {
3,
-1, 1, 42,
13, 0, 27,
- 54, 0, 335
+ 51, 0, 341
};
-static int parser_action_row182[] = {
+static int parser_action_row186[] = {
1,
- -1, 1, 318
+ -1, 1, 305
};
-static int parser_action_row183[] = {
+static int parser_action_row187[] = {
1,
- -1, 1, 292
+ -1, 1, 280
};
-static int parser_action_row184[] = {
+static int parser_action_row188[] = {
1,
- -1, 1, 293
+ -1, 1, 281
};
-static int parser_action_row185[] = {
+static int parser_action_row189[] = {
1,
- -1, 1, 294
+ -1, 1, 282
};
-static int parser_action_row186[] = {
+static int parser_action_row190[] = {
1,
- -1, 1, 295
+ -1, 1, 283
};
-static int parser_action_row187[] = {
+static int parser_action_row191[] = {
3,
- -1, 3, 186,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 190,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row188[] = {
+static int parser_action_row192[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row189[] = {
+static int parser_action_row193[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row190[] = {
+static int parser_action_row194[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row191[] = {
+static int parser_action_row195[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row192[] = {
+static int parser_action_row196[] = {
1,
- -1, 1, 296
+ -1, 1, 284
};
-static int parser_action_row193[] = {
+static int parser_action_row197[] = {
1,
- -1, 1, 297
+ -1, 1, 285
};
-static int parser_action_row194[] = {
+static int parser_action_row198[] = {
1,
- -1, 1, 298
+ -1, 1, 286
};
-static int parser_action_row195[] = {
+static int parser_action_row199[] = {
1,
- -1, 1, 300
+ -1, 1, 288
};
-static int parser_action_row196[] = {
+static int parser_action_row200[] = {
1,
- -1, 1, 299
+ -1, 1, 287
};
-static int parser_action_row197[] = {
+static int parser_action_row201[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row198[] = {
+static int parser_action_row202[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row199[] = {
+static int parser_action_row203[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row200[] = {
+static int parser_action_row204[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row201[] = {
+static int parser_action_row205[] = {
9,
- -1, 3, 200,
- 3, 0, 350,
- 4, 0, 351,
- 5, 0, 352,
- 6, 0, 353,
- 7, 0, 354,
- 8, 0, 355,
- 10, 0, 356,
- 20, 0, 357
+ -1, 3, 204,
+ 3, 0, 356,
+ 4, 0, 357,
+ 5, 0, 358,
+ 6, 0, 359,
+ 7, 0, 360,
+ 8, 0, 361,
+ 10, 0, 362,
+ 17, 0, 363
};
-static int parser_action_row202[] = {
+static int parser_action_row206[] = {
1,
- -1, 1, 153
+ -1, 1, 137
};
-static int parser_action_row203[] = {
+static int parser_action_row207[] = {
1,
-1, 1, 810
};
-static int parser_action_row204[] = {
+static int parser_action_row208[] = {
31,
- -1, 1, 173,
+ -1, 1, 157,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row205[] = {
+static int parser_action_row209[] = {
3,
- -1, 1, 172,
+ -1, 1, 156,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row206[] = {
+static int parser_action_row210[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row207[] = {
+static int parser_action_row211[] = {
1,
- -1, 1, 306
+ -1, 1, 279
};
-static int parser_action_row208[] = {
+static int parser_action_row212[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row209[] = {
+static int parser_action_row213[] = {
4,
- -1, 1, 287,
- 61, 0, 364,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 274,
+ 58, 0, 370,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row210[] = {
+static int parser_action_row214[] = {
1,
- -1, 1, 314
+ -1, 1, 301
};
-static int parser_action_row211[] = {
+static int parser_action_row215[] = {
1,
- -1, 1, 315
+ -1, 1, 302
};
-static int parser_action_row212[] = {
+static int parser_action_row216[] = {
1,
-1, 1, 812
};
-static int parser_action_row213[] = {
+static int parser_action_row217[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row214[] = {
+static int parser_action_row218[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row215[] = {
+static int parser_action_row219[] = {
3,
- -1, 3, 214,
- 91, 0, 209,
- 92, 0, 210
+ -1, 3, 218,
+ 89, 0, 213,
+ 90, 0, 214
};
-static int parser_action_row216[] = {
+static int parser_action_row220[] = {
24,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 91, 1, 310,
- 92, 1, 310,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 89, 1, 297,
+ 90, 1, 297,
+ 91, 0, 55
};
-static int parser_action_row217[] = {
+static int parser_action_row221[] = {
1,
- -1, 1, 291
+ -1, 1, 293
};
-static int parser_action_row218[] = {
+static int parser_action_row222[] = {
26,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 56, 1, 349,
- 64, 1, 349,
- 66, 1, 349,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 53, 1, 340,
+ 61, 1, 340,
+ 63, 1, 340,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row219[] = {
+static int parser_action_row223[] = {
4,
- -1, 1, 281,
- 61, 0, 375,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 268,
+ 58, 0, 381,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row220[] = {
+static int parser_action_row224[] = {
4,
- -1, 1, 283,
- 61, 0, 377,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 270,
+ 58, 0, 383,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row221[] = {
+static int parser_action_row225[] = {
1,
- -1, 1, 194
+ -1, 1, 178
};
-static int parser_action_row222[] = {
+static int parser_action_row226[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row223[] = {
+static int parser_action_row227[] = {
1,
- -1, 1, 369
+ -1, 1, 360
};
-static int parser_action_row224[] = {
+static int parser_action_row228[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row225[] = {
+static int parser_action_row229[] = {
2,
- -1, 1, 371,
- 60, 0, 190
+ -1, 1, 362,
+ 57, 0, 194
};
-static int parser_action_row226[] = {
+static int parser_action_row230[] = {
1,
-1, 1, 825
};
-static int parser_action_row227[] = {
+static int parser_action_row231[] = {
3,
- -1, 1, 365,
- 12, 0, 382,
- 84, 0, 383
+ -1, 1, 356,
+ 12, 0, 388,
+ 82, 0, 389
};
-static int parser_action_row228[] = {
+static int parser_action_row232[] = {
2,
- -1, 1, 388,
- 0, 0, 98
+ -1, 1, 379,
+ 0, 0, 99
};
-static int parser_action_row229[] = {
+static int parser_action_row233[] = {
1,
-1, 1, 6
};
-static int parser_action_row230[] = {
+static int parser_action_row234[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
-static int parser_action_row231[] = {
+static int parser_action_row235[] = {
1,
-1, 1, 10
};
-static int parser_action_row232[] = {
+static int parser_action_row236[] = {
5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
+ -1, 1, 80,
+ 18, 0, 200,
+ 19, 0, 201,
+ 20, 0, 202,
+ 21, 0, 203
};
-static int parser_action_row233[] = {
+static int parser_action_row237[] = {
1,
-1, 1, 12
};
-static int parser_action_row234[] = {
+static int parser_action_row238[] = {
8,
- -1, 3, 233,
- 4, 0, 351,
- 5, 0, 352,
- 6, 0, 353,
- 7, 0, 354,
- 8, 0, 355,
- 10, 0, 356,
- 20, 0, 357
+ -1, 3, 237,
+ 4, 0, 357,
+ 5, 0, 358,
+ 6, 0, 359,
+ 7, 0, 360,
+ 8, 0, 361,
+ 10, 0, 362,
+ 17, 0, 363
};
-static int parser_action_row235[] = {
+static int parser_action_row239[] = {
1,
-1, 1, 7
};
-static int parser_action_row236[] = {
+static int parser_action_row240[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 97, 1, 22
+ 95, 1, 22
};
-static int parser_action_row237[] = {
+static int parser_action_row241[] = {
1,
-1, 1, 11
};
-static int parser_action_row238[] = {
+static int parser_action_row242[] = {
1,
-1, 1, 13
};
-static int parser_action_row239[] = {
+static int parser_action_row243[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row240[] = {
+static int parser_action_row244[] = {
1,
- -1, 1, 542
+ -1, 1, 537
};
-static int parser_action_row241[] = {
+static int parser_action_row245[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row242[] = {
+static int parser_action_row246[] = {
19,
- -1, 1, 367,
- 12, 0, 106,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row243[] = {
+static int parser_action_row247[] = {
3,
- -1, 3, 242,
- 50, 0, 332,
- 83, 0, 333
+ -1, 3, 246,
+ 47, 0, 338,
+ 81, 0, 339
};
-static int parser_action_row244[] = {
+static int parser_action_row248[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row245[] = {
+static int parser_action_row249[] = {
+ 1,
+ -1, 1, 544
+};
+static int parser_action_row250[] = {
1,
-1, 1, 545
};
-static int parser_action_row246[] = {
+static int parser_action_row251[] = {
1,
-1, 1, 546
};
-static int parser_action_row247[] = {
+static int parser_action_row252[] = {
1,
-1, 1, 547
};
-static int parser_action_row248[] = {
- 1,
- -1, 1, 548
-};
-static int parser_action_row249[] = {
+static int parser_action_row253[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row250[] = {
- 3,
- -1, 3, 249,
- 44, 0, 258,
- 85, 0, 393
-};
-static int parser_action_row251[] = {
- 4,
- -1, 3, 250,
- 56, 0, 205,
- 64, 0, 279,
- 66, 0, 394
-};
-static int parser_action_row252[] = {
- 23,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 55, 0, 395,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row253[] = {
- 18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
-};
static int parser_action_row254[] = {
- 1,
- -1, 1, 549
+ 3,
+ -1, 3, 253,
+ 41, 0, 262,
+ 83, 0, 399
};
static int parser_action_row255[] = {
- 1,
- -1, 1, 550
+ 4,
+ -1, 3, 254,
+ 53, 0, 209,
+ 61, 0, 284,
+ 63, 0, 400
};
static int parser_action_row256[] = {
- 1,
- -1, 1, 551
+ 23,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 52, 0, 401,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row257[] = {
- 1,
- -1, 1, 553
+ 18,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row258[] = {
1,
- -1, 1, 552
+ -1, 1, 548
};
static int parser_action_row259[] = {
- 2,
- -1, 1, 349,
- 54, 0, 238
+ 1,
+ -1, 1, 549
};
static int parser_action_row260[] = {
1,
- -1, 1, 537
+ -1, 1, 550
};
static int parser_action_row261[] = {
1,
- -1, 1, 539
+ -1, 1, 552
};
static int parser_action_row262[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 1,
+ -1, 1, 551
};
static int parser_action_row263[] = {
- 4,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2,
- 27, 0, 401
+ 2,
+ -1, 1, 340,
+ 51, 0, 242
};
static int parser_action_row264[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 1,
+ -1, 1, 532
};
static int parser_action_row265[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 1,
+ -1, 1, 534
};
static int parser_action_row266[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row267[] = {
- 3,
- -1, 1, 385,
+ 4,
+ -1, 1, 376,
0, 0, 1,
- 1, 0, 2
+ 1, 0, 2,
+ 24, 0, 407
};
static int parser_action_row268[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row269[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row270[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row271[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row272[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row273[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row274[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row275[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row276[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row277[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row278[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row279[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row280[] = {
- 1,
- -1, 1, 558
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row281[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row282[] = {
- 1,
- -1, 1, 543
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row283[] = {
- 2,
- -1, 1, 365,
- 84, 0, 383
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row284[] = {
- 2,
- -1, 1, 168,
- 52, 1, 726
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row285[] = {
- 2,
- -1, 1, 167,
- 52, 1, 725
+ 1,
+ -1, 1, 543
};
static int parser_action_row286[] = {
3,
- -1, 3, 285,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row287[] = {
1,
- -1, 1, 223
+ -1, 1, 538
};
static int parser_action_row288[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 2,
+ -1, 1, 356,
+ 82, 0, 389
};
static int parser_action_row289[] = {
2,
- -1, 1, 207,
- 61, 0, 423
+ -1, 1, 152,
+ 49, 1, 725
};
static int parser_action_row290[] = {
2,
- -1, 1, 166,
- 59, 0, 287
+ -1, 1, 151,
+ 49, 1, 724
};
static int parser_action_row291[] = {
3,
- -1, 1, 385,
+ -1, 3, 290,
0, 0, 1,
1, 0, 2
};
static int parser_action_row292[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
-};
-static int parser_action_row293[] = {
1,
- -1, 1, 232
+ -1, 1, 207
};
-static int parser_action_row294[] = {
+static int parser_action_row293[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
+static int parser_action_row294[] = {
+ 2,
+ -1, 1, 191,
+ 58, 0, 430
+};
static int parser_action_row295[] = {
- 1,
- -1, 1, 358
+ 2,
+ -1, 1, 150,
+ 56, 0, 292
};
static int parser_action_row296[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row297[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row298[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 1,
+ -1, 1, 216
};
static int parser_action_row299[] = {
- 21,
- -1, 1, 367,
- 12, 0, 152,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row300[] = {
- 3,
- -1, 3, 299,
- 50, 0, 332,
- 83, 0, 333
+ 1,
+ -1, 1, 349
};
static int parser_action_row301[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row302[] = {
- 4,
- -1, 3, 301,
- 56, 0, 205,
- 64, 0, 206,
- 66, 0, 434
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row303[] = {
- 3,
- -1, 3, 302,
- 44, 0, 324,
- 85, 0, 435
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row304[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 21,
+ -1, 1, 358,
+ 12, 0, 155,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row305[] = {
3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ -1, 3, 304,
+ 47, 0, 338,
+ 81, 0, 339
};
static int parser_action_row306[] = {
- 4,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2,
- 27, 0, 438
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row307[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 4,
+ -1, 3, 306,
+ 53, 0, 209,
+ 61, 0, 210,
+ 63, 0, 441
};
static int parser_action_row308[] = {
3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ -1, 3, 307,
+ 41, 0, 330,
+ 83, 0, 442
};
static int parser_action_row309[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row310[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row311[] = {
- 3,
- -1, 1, 385,
+ 4,
+ -1, 1, 376,
0, 0, 1,
- 1, 0, 2
+ 1, 0, 2,
+ 24, 0, 445
};
static int parser_action_row312[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row313[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row314[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row315[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row316[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row317[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row318[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row319[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row320[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row321[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row322[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row323[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row324[] = {
- 1,
- -1, 1, 287
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row325[] = {
- 2,
- -1, 1, 349,
- 54, 0, 238
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row326[] = {
- 1,
- -1, 1, 281
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row327[] = {
- 1,
- -1, 1, 283
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row328[] = {
- 1,
- -1, 1, 206
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row329[] = {
- 1,
- -1, 1, 244
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row330[] = {
1,
- -1, 1, 243
+ -1, 1, 274
};
static int parser_action_row331[] = {
2,
- -1, 3, 330,
- 27, 0, 457
+ -1, 1, 340,
+ 51, 0, 242
};
static int parser_action_row332[] = {
- 32,
- -1, 1, 367,
- 0, 0, 1,
- 1, 0, 2,
- 9, 0, 458,
- 12, 0, 26,
- 15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 1,
+ -1, 1, 268
};
static int parser_action_row333[] = {
- 2,
- -1, 3, 332,
- 83, 0, 461
+ 1,
+ -1, 1, 270
};
static int parser_action_row334[] = {
- 3,
- -1, 1, 562,
- 56, 0, 462,
- 82, 0, 463
+ 1,
+ -1, 1, 190
};
static int parser_action_row335[] = {
- 2,
- -1, 3, 334,
- 66, 0, 466
+ 1,
+ -1, 1, 228
};
static int parser_action_row336[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 1,
+ -1, 1, 227
};
static int parser_action_row337[] = {
- 5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
+ 2,
+ -1, 3, 336,
+ 24, 0, 465
};
static int parser_action_row338[] = {
- 1,
- -1, 1, 316
+ 32,
+ -1, 1, 358,
+ 0, 0, 1,
+ 1, 0, 2,
+ 9, 0, 466,
+ 12, 0, 26,
+ 15, 0, 28,
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row339[] = {
2,
-1, 3, 338,
- 83, 0, 469
+ 81, 0, 469
};
static int parser_action_row340[] = {
3,
- -1, 1, 319,
- 56, 0, 470,
- 82, 0, 180
+ -1, 1, 557,
+ 53, 0, 470,
+ 80, 0, 471
};
static int parser_action_row341[] = {
2,
-1, 3, 340,
- 59, 0, 472
+ 63, 0, 474
};
static int parser_action_row342[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row343[] = {
+ 5,
+ -1, 1, 80,
+ 18, 0, 200,
+ 19, 0, 201,
+ 20, 0, 202,
+ 21, 0, 203
+};
+static int parser_action_row344[] = {
+ 1,
+ -1, 1, 303
+};
+static int parser_action_row345[] = {
+ 2,
+ -1, 3, 344,
+ 81, 0, 477
+};
+static int parser_action_row346[] = {
+ 3,
+ -1, 1, 306,
+ 53, 0, 478,
+ 80, 0, 184
+};
+static int parser_action_row347[] = {
+ 2,
+ -1, 3, 346,
+ 56, 0, 480
+};
+static int parser_action_row348[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row344[] = {
+static int parser_action_row349[] = {
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
+};
+static int parser_action_row350[] = {
2,
- -1, 3, 343,
- 57, 0, 475
+ -1, 3, 349,
+ 54, 0, 483
};
-static int parser_action_row345[] = {
+static int parser_action_row351[] = {
1,
- -1, 1, 377
+ -1, 1, 368
};
-static int parser_action_row346[] = {
+static int parser_action_row352[] = {
1,
- -1, 1, 376
+ -1, 1, 367
};
-static int parser_action_row347[] = {
+static int parser_action_row353[] = {
1,
- -1, 1, 98
+ -1, 1, 81
};
-static int parser_action_row348[] = {
+static int parser_action_row354[] = {
1,
- -1, 1, 100
+ -1, 1, 83
};
-static int parser_action_row349[] = {
+static int parser_action_row355[] = {
1,
- -1, 1, 99
+ -1, 1, 82
};
-static int parser_action_row350[] = {
+static int parser_action_row356[] = {
1,
- -1, 1, 101
+ -1, 1, 84
};
-static int parser_action_row351[] = {
+static int parser_action_row357[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row352[] = {
+static int parser_action_row358[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row353[] = {
+static int parser_action_row359[] = {
1,
-1, 1, 44
};
-static int parser_action_row354[] = {
+static int parser_action_row360[] = {
2,
- -1, 3, 353,
- 5, 0, 478
+ -1, 3, 359,
+ 5, 0, 486
};
-static int parser_action_row355[] = {
+static int parser_action_row361[] = {
1,
-1, 1, 46
};
-static int parser_action_row356[] = {
+static int parser_action_row362[] = {
1,
-1, 1, 47
};
-static int parser_action_row357[] = {
- 17,
- -1, 3, 356,
- 56, 0, 479,
- 67, 0, 480,
- 68, 0, 481,
- 69, 0, 482,
- 70, 0, 483,
- 71, 0, 484,
- 72, 0, 485,
- 73, 0, 486,
- 74, 0, 487,
- 75, 0, 488,
- 76, 0, 489,
- 77, 0, 490,
- 78, 0, 491,
- 79, 0, 492,
- 80, 0, 493,
- 84, 0, 494
+static int parser_action_row363[] = {
+ 18,
+ -1, 3, 362,
+ 53, 0, 487,
+ 64, 0, 488,
+ 65, 0, 489,
+ 66, 0, 490,
+ 67, 0, 491,
+ 68, 0, 492,
+ 69, 0, 493,
+ 70, 0, 494,
+ 71, 0, 495,
+ 72, 0, 496,
+ 73, 0, 497,
+ 74, 0, 498,
+ 75, 0, 499,
+ 76, 0, 500,
+ 77, 0, 501,
+ 78, 0, 502,
+ 82, 0, 503
};
-static int parser_action_row358[] = {
+static int parser_action_row364[] = {
2,
- -1, 3, 357,
- 5, 0, 496
+ -1, 3, 363,
+ 5, 0, 505
};
-static int parser_action_row359[] = {
+static int parser_action_row365[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row360[] = {
+static int parser_action_row366[] = {
1,
- -1, 1, 177
+ -1, 1, 161
};
-static int parser_action_row361[] = {
+static int parser_action_row367[] = {
1,
-1, 1, 811
};
-static int parser_action_row362[] = {
+static int parser_action_row368[] = {
31,
- -1, 1, 174,
+ -1, 1, 158,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row363[] = {
+static int parser_action_row369[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row364[] = {
+static int parser_action_row370[] = {
5,
- -1, 1, 367,
- 12, 0, 498,
- 49, 0, 499,
- 83, 0, 48,
- 84, 0, 49
+ -1, 1, 358,
+ 12, 0, 507,
+ 46, 0, 508,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row365[] = {
+static int parser_action_row371[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row366[] = {
+static int parser_action_row372[] = {
1,
- -1, 1, 221
+ -1, 1, 205
};
-static int parser_action_row367[] = {
+static int parser_action_row373[] = {
1,
- -1, 1, 222
+ -1, 1, 206
};
-static int parser_action_row368[] = {
+static int parser_action_row374[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row369[] = {
+static int parser_action_row375[] = {
24,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 91, 1, 313,
- 92, 1, 313,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 89, 1, 300,
+ 90, 1, 300,
+ 91, 0, 55
};
-static int parser_action_row370[] = {
+static int parser_action_row376[] = {
1,
- -1, 1, 307
+ -1, 1, 294
};
-static int parser_action_row371[] = {
+static int parser_action_row377[] = {
1,
-1, 1, 813
};
-static int parser_action_row372[] = {
+static int parser_action_row378[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row373[] = {
+static int parser_action_row379[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row374[] = {
+static int parser_action_row380[] = {
1,
- -1, 1, 284
+ -1, 1, 271
};
-static int parser_action_row375[] = {
+static int parser_action_row381[] = {
1,
- -1, 1, 195
+ -1, 1, 179
};
-static int parser_action_row376[] = {
+static int parser_action_row382[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row377[] = {
+static int parser_action_row383[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row378[] = {
+static int parser_action_row384[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row379[] = {
+static int parser_action_row385[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row380[] = {
+static int parser_action_row386[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row381[] = {
+static int parser_action_row387[] = {
1,
- -1, 1, 201
+ -1, 1, 185
};
-static int parser_action_row382[] = {
+static int parser_action_row388[] = {
1,
- -1, 1, 203
+ -1, 1, 187
};
-static int parser_action_row383[] = {
+static int parser_action_row389[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row384[] = {
+static int parser_action_row390[] = {
1,
- -1, 1, 370
+ -1, 1, 361
};
-static int parser_action_row385[] = {
+static int parser_action_row391[] = {
1,
-1, 1, 14
};
-static int parser_action_row386[] = {
+static int parser_action_row392[] = {
7,
- -1, 3, 385,
- 5, 0, 352,
- 6, 0, 353,
- 7, 0, 354,
- 8, 0, 355,
- 10, 0, 356,
- 20, 0, 357
+ -1, 3, 391,
+ 5, 0, 358,
+ 6, 0, 359,
+ 7, 0, 360,
+ 8, 0, 361,
+ 10, 0, 362,
+ 17, 0, 363
};
-static int parser_action_row387[] = {
+static int parser_action_row393[] = {
1,
-1, 1, 15
};
-static int parser_action_row388[] = {
+static int parser_action_row394[] = {
23,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 55, 0, 515,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 52, 0, 524,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row389[] = {
+static int parser_action_row395[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row390[] = {
+static int parser_action_row396[] = {
1,
- -1, 1, 510
+ -1, 1, 502
};
-static int parser_action_row391[] = {
+static int parser_action_row397[] = {
3,
- -1, 1, 349,
- 54, 0, 238,
- 66, 0, 518
+ -1, 1, 340,
+ 51, 0, 242,
+ 63, 0, 527
};
-static int parser_action_row392[] = {
+static int parser_action_row398[] = {
1,
- -1, 1, 531
+ -1, 1, 525
};
-static int parser_action_row393[] = {
+static int parser_action_row399[] = {
3,
- -1, 3, 392,
- 50, 0, 332,
- 83, 0, 333
+ -1, 3, 398,
+ 47, 0, 338,
+ 81, 0, 339
};
-static int parser_action_row394[] = {
+static int parser_action_row400[] = {
4,
- -1, 1, 535,
- 56, 1, 537,
- 64, 1, 537,
- 66, 1, 537
+ -1, 1, 529,
+ 53, 1, 532,
+ 61, 1, 532,
+ 63, 1, 532
};
-static int parser_action_row395[] = {
+static int parser_action_row401[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row396[] = {
+static int parser_action_row402[] = {
7,
- -1, 1, 352,
- 56, 1, 348,
- 61, 1, 348,
- 62, 1, 348,
- 63, 1, 348,
- 64, 1, 348,
- 66, 1, 348
+ -1, 1, 343,
+ 53, 1, 339,
+ 58, 1, 339,
+ 59, 1, 339,
+ 60, 1, 339,
+ 61, 1, 339,
+ 63, 1, 339
};
-static int parser_action_row397[] = {
+static int parser_action_row403[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row398[] = {
+static int parser_action_row404[] = {
2,
- -1, 3, 397,
- 55, 0, 523
+ -1, 3, 403,
+ 52, 0, 532
};
-static int parser_action_row399[] = {
+static int parser_action_row405[] = {
1,
- -1, 1, 530
+ -1, 1, 524
};
-static int parser_action_row400[] = {
+static int parser_action_row406[] = {
1,
- -1, 1, 540
+ -1, 1, 535
};
-static int parser_action_row401[] = {
+static int parser_action_row407[] = {
19,
- -1, 1, 367,
- 12, 0, 106,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row402[] = {
+static int parser_action_row408[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row403[] = {
- 19,
- -1, 1, 367,
- 12, 0, 106,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
-};
-static int parser_action_row404[] = {
- 19,
- -1, 1, 367,
- 12, 0, 106,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
-};
-static int parser_action_row405[] = {
- 18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
-};
-static int parser_action_row406[] = {
- 18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
-};
-static int parser_action_row407[] = {
- 3,
- -1, 3, 406,
- 50, 0, 338,
- 83, 0, 339
-};
-static int parser_action_row408[] = {
- 18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
-};
static int parser_action_row409[] = {
- 18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ 19,
+ -1, 1, 358,
+ 12, 0, 107,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row410[] = {
- 18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ 19,
+ -1, 1, 358,
+ 12, 0, 107,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row411[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row412[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row413[] = {
- 18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ 3,
+ -1, 3, 412,
+ 47, 0, 344,
+ 81, 0, 345
};
static int parser_action_row414[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row415[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row416[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row417[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row418[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row419[] = {
18,
- -1, 1, 367,
- 12, 0, 106,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row420[] = {
- 5,
- -1, 1, 367,
- 12, 0, 543,
- 49, 0, 544,
- 83, 0, 48,
- 84, 0, 49
+ 18,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row421[] = {
- 30,
- -1, 1, 367,
- 9, 0, 547,
- 12, 0, 26,
- 15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 18,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row422[] = {
- 3,
- -1, 3, 421,
- 0, 0, 1,
- 1, 0, 2
+ 18,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row423[] = {
- 3,
- -1, 3, 422,
- 50, 0, 338,
- 83, 0, 339
+ 18,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row424[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 18,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row425[] = {
- 2,
- -1, 1, 208,
- 61, 0, 551
+ 18,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row426[] = {
- 2,
- -1, 3, 425,
- 26, 0, 552
+ 18,
+ -1, 1, 358,
+ 12, 0, 107,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row427[] = {
- 2,
- -1, 3, 426,
- 15, 0, 553
+ 5,
+ -1, 1, 358,
+ 12, 0, 553,
+ 46, 0, 554,
+ 81, 0, 48,
+ 82, 0, 49
};
static int parser_action_row428[] = {
- 2,
- -1, 3, 427,
- 84, 0, 294
+ 30,
+ -1, 1, 358,
+ 9, 0, 557,
+ 12, 0, 26,
+ 15, 0, 28,
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row429[] = {
3,
-1, 3, 428,
- 31, 0, 555,
- 58, 0, 556
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row430[] = {
- 1,
- -1, 1, 151
+ 3,
+ -1, 3, 429,
+ 47, 0, 344,
+ 81, 0, 345
};
static int parser_action_row431[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row432[] = {
- 1,
- -1, 1, 254
+ 2,
+ -1, 1, 192,
+ 58, 0, 561
};
static int parser_action_row433[] = {
- 3,
- -1, 1, 349,
- 54, 0, 238,
- 66, 0, 466
+ 2,
+ -1, 3, 432,
+ 23, 0, 562
};
static int parser_action_row434[] = {
- 1,
- -1, 1, 275
+ 2,
+ -1, 3, 433,
+ 15, 0, 563
};
static int parser_action_row435[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 2,
+ -1, 3, 434,
+ 82, 0, 299
};
static int parser_action_row436[] = {
- 4,
- -1, 1, 279,
- 56, 1, 281,
- 64, 1, 281,
- 66, 1, 281
+ 3,
+ -1, 3, 435,
+ 28, 0, 565,
+ 55, 0, 566
};
static int parser_action_row437[] = {
1,
- -1, 1, 274
+ -1, 1, 135
};
static int parser_action_row438[] = {
- 21,
- -1, 1, 367,
- 12, 0, 152,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row439[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
+static int parser_action_row439[] = {
+ 1,
+ -1, 1, 238
+};
static int parser_action_row440[] = {
- 21,
- -1, 1, 367,
- 12, 0, 152,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 1, 340,
+ 51, 0, 242,
+ 63, 0, 474
};
static int parser_action_row441[] = {
- 21,
- -1, 1, 367,
- 12, 0, 152,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 1,
+ -1, 1, 261
};
static int parser_action_row442[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row443[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 4,
+ -1, 1, 265,
+ 53, 1, 268,
+ 61, 1, 268,
+ 63, 1, 268
};
static int parser_action_row444[] = {
- 3,
- -1, 3, 443,
- 50, 0, 338,
- 83, 0, 339
+ 1,
+ -1, 1, 260
};
static int parser_action_row445[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 21,
+ -1, 1, 358,
+ 12, 0, 155,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row446[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row447[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 21,
+ -1, 1, 358,
+ 12, 0, 155,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row448[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 21,
+ -1, 1, 358,
+ 12, 0, 155,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row449[] = {
20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row450[] = {
20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row451[] = {
- 20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 3, 450,
+ 47, 0, 344,
+ 81, 0, 345
};
static int parser_action_row452[] = {
20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row453[] = {
20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row454[] = {
20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row455[] = {
20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row456[] = {
20,
- -1, 1, 367,
- 12, 0, 152,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row457[] = {
- 5,
- -1, 1, 367,
- 12, 0, 579,
- 49, 0, 499,
- 83, 0, 48,
- 84, 0, 49
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row458[] = {
- 32,
- -1, 1, 367,
- 0, 0, 1,
- 1, 0, 2,
- 9, 0, 458,
- 12, 0, 26,
- 15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row459[] = {
- 1,
- -1, 1, 169
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row460[] = {
- 1,
- -1, 1, 240
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row461[] = {
- 30,
- -1, 1, 367,
- 9, 0, 583,
- 12, 0, 26,
- 15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row462[] = {
- 3,
- -1, 1, 562,
- 56, 0, 585,
- 82, 0, 463
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row463[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row464[] = {
- 3,
- -1, 1, 42,
- 13, 0, 27,
- 54, 0, 588
+ 20,
+ -1, 1, 358,
+ 12, 0, 155,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row465[] = {
- 1,
- -1, 1, 561
+ 5,
+ -1, 1, 358,
+ 12, 0, 590,
+ 46, 0, 508,
+ 81, 0, 48,
+ 82, 0, 49
};
static int parser_action_row466[] = {
- 1,
- -1, 1, 460
+ 32,
+ -1, 1, 358,
+ 0, 0, 1,
+ 1, 0, 2,
+ 9, 0, 466,
+ 12, 0, 26,
+ 15, 0, 28,
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row467[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 1,
+ -1, 1, 153
};
static int parser_action_row468[] = {
- 2,
- -1, 1, 42,
- 13, 0, 27
+ 1,
+ -1, 1, 224
};
static int parser_action_row469[] = {
- 4,
- -1, 3, 468,
- 16, 0, 594,
- 17, 0, 595,
- 84, 0, 596
+ 30,
+ -1, 1, 358,
+ 9, 0, 594,
+ 12, 0, 26,
+ 15, 0, 28,
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row470[] = {
3,
- -1, 1, 319,
- 56, 0, 598,
- 82, 0, 180
+ -1, 1, 557,
+ 53, 0, 596,
+ 80, 0, 471
};
static int parser_action_row471[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
static int parser_action_row472[] = {
- 1,
- -1, 1, 157
+ 3,
+ -1, 1, 42,
+ 13, 0, 27,
+ 51, 0, 599
};
static int parser_action_row473[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 1,
+ -1, 1, 556
};
static int parser_action_row474[] = {
- 2,
- -1, 3, 473,
- 55, 0, 602
+ 1,
+ -1, 1, 452
};
static int parser_action_row475[] = {
3,
- -1, 1, 355,
- 58, 0, 603,
- 65, 0, 604
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row476[] = {
- 1,
- -1, 1, 354
+ 2,
+ -1, 1, 42,
+ 13, 0, 27
};
static int parser_action_row477[] = {
- 3,
+ 4,
-1, 3, 476,
- 60, 0, 607,
- 84, 0, 608
+ 6, 0, 606,
+ 17, 0, 607,
+ 82, 0, 608
};
static int parser_action_row478[] = {
- 4,
- -1, 3, 477,
- 9, 0, 611,
- 60, 0, 607,
- 84, 0, 608
+ 3,
+ -1, 1, 306,
+ 53, 0, 610,
+ 80, 0, 184
};
static int parser_action_row479[] = {
- 1,
- -1, 1, 45
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row480[] = {
- 2,
- -1, 3, 479,
- 57, 0, 613
+ 1,
+ -1, 1, 141
};
static int parser_action_row481[] = {
- 1,
- -1, 1, 103
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row482[] = {
- 1,
- -1, 1, 104
+ 2,
+ -1, 3, 481,
+ 52, 0, 614
};
static int parser_action_row483[] = {
- 1,
- -1, 1, 105
+ 3,
+ -1, 1, 346,
+ 55, 0, 615,
+ 62, 0, 616
};
static int parser_action_row484[] = {
1,
- -1, 1, 106
+ -1, 1, 345
};
static int parser_action_row485[] = {
- 1,
- -1, 1, 107
+ 3,
+ -1, 3, 484,
+ 57, 0, 619,
+ 82, 0, 620
};
static int parser_action_row486[] = {
- 1,
- -1, 1, 108
+ 4,
+ -1, 3, 485,
+ 9, 0, 623,
+ 57, 0, 619,
+ 82, 0, 620
};
static int parser_action_row487[] = {
1,
- -1, 1, 109
+ -1, 1, 45
};
static int parser_action_row488[] = {
- 1,
- -1, 1, 112
+ 2,
+ -1, 3, 487,
+ 54, 0, 625
};
static int parser_action_row489[] = {
1,
- -1, 1, 110
+ -1, 1, 86
};
static int parser_action_row490[] = {
1,
- -1, 1, 114
+ -1, 1, 87
};
static int parser_action_row491[] = {
1,
- -1, 1, 113
+ -1, 1, 88
};
static int parser_action_row492[] = {
1,
- -1, 1, 111
+ -1, 1, 89
};
static int parser_action_row493[] = {
1,
- -1, 1, 115
+ -1, 1, 90
};
static int parser_action_row494[] = {
1,
- -1, 1, 117
+ -1, 1, 91
};
static int parser_action_row495[] = {
- 2,
- -1, 1, 102,
- 61, 0, 614
+ 1,
+ -1, 1, 92
};
static int parser_action_row496[] = {
+ 1,
+ -1, 1, 93
+};
+static int parser_action_row497[] = {
+ 1,
+ -1, 1, 96
+};
+static int parser_action_row498[] = {
+ 1,
+ -1, 1, 94
+};
+static int parser_action_row499[] = {
+ 1,
+ -1, 1, 98
+};
+static int parser_action_row500[] = {
+ 1,
+ -1, 1, 97
+};
+static int parser_action_row501[] = {
+ 1,
+ -1, 1, 95
+};
+static int parser_action_row502[] = {
+ 1,
+ -1, 1, 99
+};
+static int parser_action_row503[] = {
+ 1,
+ -1, 1, 101
+};
+static int parser_action_row504[] = {
+ 2,
+ -1, 1, 85,
+ 58, 0, 626
+};
+static int parser_action_row505[] = {
5,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 54, 0, 615,
- 59, 0, 616
+ 51, 0, 627,
+ 56, 0, 628
};
-static int parser_action_row497[] = {
+static int parser_action_row506[] = {
1,
-1, 1, 48
};
-static int parser_action_row498[] = {
+static int parser_action_row507[] = {
3,
- -1, 3, 497,
- 83, 0, 620,
- 84, 0, 621
+ -1, 3, 506,
+ 81, 0, 632,
+ 82, 0, 633
};
-static int parser_action_row499[] = {
+static int parser_action_row508[] = {
26,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 56, 1, 349,
- 64, 1, 349,
- 66, 1, 349,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 53, 1, 340,
+ 61, 1, 340,
+ 63, 1, 340,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row500[] = {
+static int parser_action_row509[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row501[] = {
+static int parser_action_row510[] = {
2,
- -1, 3, 500,
- 85, 0, 628
+ -1, 3, 509,
+ 83, 0, 640
};
-static int parser_action_row502[] = {
+static int parser_action_row511[] = {
29,
- -1, 1, 349,
- 0, 1, 353,
- 1, 1, 353,
- 9, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 55, 1, 353,
- 58, 1, 353,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122,
- 97, 1, 353
+ -1, 1, 340,
+ 0, 1, 344,
+ 1, 1, 344,
+ 9, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 52, 1, 344,
+ 55, 1, 344,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123,
+ 95, 1, 344
};
-static int parser_action_row503[] = {
+static int parser_action_row512[] = {
3,
- -1, 1, 364,
- 12, 0, 631,
- 84, 0, 222
+ -1, 1, 355,
+ 12, 0, 643,
+ 82, 0, 226
};
-static int parser_action_row504[] = {
+static int parser_action_row513[] = {
4,
- -1, 1, 366,
- 12, 0, 632,
- 83, 0, 48,
- 84, 0, 224
+ -1, 1, 357,
+ 12, 0, 644,
+ 81, 0, 48,
+ 82, 0, 228
};
-static int parser_action_row505[] = {
+static int parser_action_row514[] = {
1,
- -1, 1, 215
+ -1, 1, 199
};
-static int parser_action_row506[] = {
+static int parser_action_row515[] = {
1,
- -1, 1, 220
+ -1, 1, 204
};
-static int parser_action_row507[] = {
+static int parser_action_row516[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row508[] = {
+static int parser_action_row517[] = {
1,
- -1, 1, 308
+ -1, 1, 295
};
-static int parser_action_row509[] = {
+static int parser_action_row518[] = {
1,
- -1, 1, 309
+ -1, 1, 296
};
-static int parser_action_row510[] = {
+static int parser_action_row519[] = {
1,
- -1, 1, 212
+ -1, 1, 196
};
-static int parser_action_row511[] = {
+static int parser_action_row520[] = {
1,
- -1, 1, 217
+ -1, 1, 201
};
-static int parser_action_row512[] = {
+static int parser_action_row521[] = {
1,
- -1, 1, 214
+ -1, 1, 198
};
-static int parser_action_row513[] = {
+static int parser_action_row522[] = {
1,
- -1, 1, 219
+ -1, 1, 203
};
-static int parser_action_row514[] = {
+static int parser_action_row523[] = {
23,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 55, 0, 635,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 52, 0, 647,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row515[] = {
+static int parser_action_row524[] = {
1,
- -1, 1, 202
+ -1, 1, 186
};
-static int parser_action_row516[] = {
+static int parser_action_row525[] = {
1,
- -1, 1, 348
+ -1, 1, 339
};
-static int parser_action_row517[] = {
+static int parser_action_row526[] = {
2,
- -1, 3, 516,
- 55, 0, 637
+ -1, 3, 525,
+ 52, 0, 649
};
-static int parser_action_row518[] = {
+static int parser_action_row527[] = {
2,
- -1, 3, 517,
- 26, 0, 638
+ -1, 3, 526,
+ 23, 0, 650
};
-static int parser_action_row519[] = {
+static int parser_action_row528[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row520[] = {
+static int parser_action_row529[] = {
1,
- -1, 1, 533
+ -1, 1, 527
};
-static int parser_action_row521[] = {
+static int parser_action_row530[] = {
2,
- -1, 3, 520,
- 66, 0, 518
+ -1, 3, 529,
+ 63, 0, 527
};
-static int parser_action_row522[] = {
+static int parser_action_row531[] = {
5,
- -1, 1, 367,
- 12, 0, 543,
- 49, 0, 544,
- 83, 0, 48,
- 84, 0, 49
+ -1, 1, 358,
+ 12, 0, 553,
+ 46, 0, 554,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row523[] = {
+static int parser_action_row532[] = {
2,
- -1, 1, 355,
- 58, 0, 603
+ -1, 1, 346,
+ 55, 0, 615
};
-static int parser_action_row524[] = {
+static int parser_action_row533[] = {
7,
- -1, 1, 350,
- 56, 1, 347,
- 61, 1, 347,
- 62, 1, 347,
- 63, 1, 347,
- 64, 1, 347,
- 66, 1, 347
+ -1, 1, 341,
+ 53, 1, 338,
+ 58, 1, 338,
+ 59, 1, 338,
+ 60, 1, 338,
+ 61, 1, 338,
+ 63, 1, 338
};
-static int parser_action_row525[] = {
+static int parser_action_row534[] = {
1,
- -1, 1, 506
+ -1, 1, 498
};
-static int parser_action_row526[] = {
+static int parser_action_row535[] = {
19,
- -1, 1, 367,
- 12, 0, 106,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row527[] = {
+static int parser_action_row536[] = {
1,
- -1, 1, 505
+ -1, 1, 497
};
-static int parser_action_row528[] = {
+static int parser_action_row537[] = {
1,
- -1, 1, 508
+ -1, 1, 500
};
-static int parser_action_row529[] = {
+static int parser_action_row538[] = {
3,
- -1, 1, 516,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 508,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row530[] = {
+static int parser_action_row539[] = {
3,
- -1, 1, 519,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 511,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row531[] = {
+static int parser_action_row540[] = {
1,
- -1, 1, 521
+ -1, 1, 513
};
-static int parser_action_row532[] = {
+static int parser_action_row541[] = {
4,
- -1, 1, 523,
- 69, 0, 276,
- 70, 0, 277,
- 71, 0, 278
+ -1, 1, 515,
+ 66, 0, 280,
+ 68, 0, 281,
+ 69, 0, 282
};
-static int parser_action_row533[] = {
+static int parser_action_row542[] = {
4,
- -1, 1, 524,
- 69, 0, 276,
- 70, 0, 277,
- 71, 0, 278
+ -1, 1, 516,
+ 66, 0, 280,
+ 68, 0, 281,
+ 69, 0, 282
};
-static int parser_action_row534[] = {
+static int parser_action_row543[] = {
3,
- -1, 1, 512,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 504,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row535[] = {
+static int parser_action_row544[] = {
3,
- -1, 1, 513,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 505,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row536[] = {
+static int parser_action_row545[] = {
3,
- -1, 1, 514,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 506,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row537[] = {
+static int parser_action_row546[] = {
3,
- -1, 1, 515,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 507,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row538[] = {
+static int parser_action_row547[] = {
3,
- -1, 1, 517,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 509,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row539[] = {
+static int parser_action_row548[] = {
3,
- -1, 1, 518,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 510,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row540[] = {
+static int parser_action_row549[] = {
3,
- -1, 1, 520,
- 67, 0, 267,
- 68, 0, 268
+ -1, 1, 512,
+ 64, 0, 271,
+ 65, 0, 272
};
-static int parser_action_row541[] = {
+static int parser_action_row550[] = {
1,
- -1, 1, 526
+ -1, 1, 518
};
-static int parser_action_row542[] = {
+static int parser_action_row551[] = {
1,
- -1, 1, 527
+ -1, 1, 519
};
-static int parser_action_row543[] = {
+static int parser_action_row552[] = {
1,
- -1, 1, 528
+ -1, 1, 520
};
-static int parser_action_row544[] = {
+static int parser_action_row553[] = {
+ 1,
+ -1, 1, 522
+};
+static int parser_action_row554[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row545[] = {
+static int parser_action_row555[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row546[] = {
+static int parser_action_row556[] = {
2,
- -1, 3, 545,
- 85, 0, 644
+ -1, 3, 555,
+ 83, 0, 656
};
-static int parser_action_row547[] = {
+static int parser_action_row557[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row548[] = {
+static int parser_action_row558[] = {
1,
- -1, 1, 175
+ -1, 1, 159
};
-static int parser_action_row549[] = {
+static int parser_action_row559[] = {
30,
- -1, 1, 367,
- 9, 0, 646,
+ -1, 1, 358,
+ 9, 0, 658,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row550[] = {
+static int parser_action_row560[] = {
1,
- -1, 1, 165
+ -1, 1, 149
};
-static int parser_action_row551[] = {
+static int parser_action_row561[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row552[] = {
+static int parser_action_row562[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row553[] = {
+static int parser_action_row563[] = {
33,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 649,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 27, 0, 654,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 9, 0, 661,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 24, 0, 666,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row554[] = {
+static int parser_action_row564[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 139,
+ 9, 0, 142,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row555[] = {
+static int parser_action_row565[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row556[] = {
+static int parser_action_row566[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row557[] = {
+static int parser_action_row567[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row558[] = {
+static int parser_action_row568[] = {
2,
- -1, 3, 557,
- 26, 0, 686
+ -1, 3, 567,
+ 23, 0, 698
};
-static int parser_action_row559[] = {
+static int parser_action_row569[] = {
1,
- -1, 1, 277
+ -1, 1, 263
};
-static int parser_action_row560[] = {
+static int parser_action_row570[] = {
5,
- -1, 1, 367,
- 12, 0, 579,
- 49, 0, 499,
- 83, 0, 48,
- 84, 0, 49
+ -1, 1, 358,
+ 12, 0, 590,
+ 46, 0, 508,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row561[] = {
+static int parser_action_row571[] = {
1,
- -1, 1, 250
+ -1, 1, 234
};
-static int parser_action_row562[] = {
+static int parser_action_row572[] = {
21,
- -1, 1, 367,
- 12, 0, 152,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row563[] = {
+static int parser_action_row573[] = {
1,
- -1, 1, 249
+ -1, 1, 233
};
-static int parser_action_row564[] = {
+static int parser_action_row574[] = {
1,
- -1, 1, 252
+ -1, 1, 236
};
-static int parser_action_row565[] = {
+static int parser_action_row575[] = {
3,
- -1, 1, 260,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 244,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row566[] = {
+static int parser_action_row576[] = {
3,
- -1, 1, 263,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 247,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row567[] = {
+static int parser_action_row577[] = {
1,
- -1, 1, 265
+ -1, 1, 249
};
-static int parser_action_row568[] = {
+static int parser_action_row578[] = {
4,
- -1, 1, 267,
- 69, 0, 319,
- 70, 0, 320,
- 71, 0, 321
+ -1, 1, 251,
+ 66, 0, 324,
+ 68, 0, 325,
+ 69, 0, 326
};
-static int parser_action_row569[] = {
+static int parser_action_row579[] = {
4,
- -1, 1, 268,
- 69, 0, 319,
- 70, 0, 320,
- 71, 0, 321
+ -1, 1, 252,
+ 66, 0, 324,
+ 68, 0, 325,
+ 69, 0, 326
};
-static int parser_action_row570[] = {
+static int parser_action_row580[] = {
3,
- -1, 1, 256,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 240,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row571[] = {
+static int parser_action_row581[] = {
3,
- -1, 1, 257,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 241,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row572[] = {
+static int parser_action_row582[] = {
3,
- -1, 1, 258,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 242,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row573[] = {
+static int parser_action_row583[] = {
3,
- -1, 1, 259,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 243,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row574[] = {
+static int parser_action_row584[] = {
3,
- -1, 1, 261,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 245,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row575[] = {
+static int parser_action_row585[] = {
3,
- -1, 1, 262,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 246,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row576[] = {
+static int parser_action_row586[] = {
3,
- -1, 1, 264,
- 67, 0, 310,
- 68, 0, 311
+ -1, 1, 248,
+ 64, 0, 315,
+ 65, 0, 316
};
-static int parser_action_row577[] = {
+static int parser_action_row587[] = {
1,
- -1, 1, 270
+ -1, 1, 254
};
-static int parser_action_row578[] = {
+static int parser_action_row588[] = {
1,
- -1, 1, 271
+ -1, 1, 255
};
-static int parser_action_row579[] = {
+static int parser_action_row589[] = {
1,
- -1, 1, 272
+ -1, 1, 256
};
-static int parser_action_row580[] = {
+static int parser_action_row590[] = {
+ 1,
+ -1, 1, 258
+};
+static int parser_action_row591[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row581[] = {
+static int parser_action_row592[] = {
2,
- -1, 3, 580,
- 85, 0, 689
+ -1, 3, 591,
+ 83, 0, 701
};
-static int parser_action_row582[] = {
+static int parser_action_row593[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row583[] = {
+static int parser_action_row594[] = {
1,
- -1, 1, 241
+ -1, 1, 225
};
-static int parser_action_row584[] = {
+static int parser_action_row595[] = {
1,
- -1, 1, 168
+ -1, 1, 152
};
-static int parser_action_row585[] = {
+static int parser_action_row596[] = {
1,
- -1, 1, 167
+ -1, 1, 151
};
-static int parser_action_row586[] = {
+static int parser_action_row597[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row587[] = {
+static int parser_action_row598[] = {
1,
- -1, 1, 461
+ -1, 1, 453
};
-static int parser_action_row588[] = {
+static int parser_action_row599[] = {
3,
- -1, 3, 587,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 598,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row589[] = {
+static int parser_action_row600[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row590[] = {
+static int parser_action_row601[] = {
5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
+ -1, 1, 80,
+ 18, 0, 200,
+ 19, 0, 201,
+ 20, 0, 202,
+ 21, 0, 203
};
-static int parser_action_row591[] = {
+static int parser_action_row602[] = {
1,
- -1, 1, 559
+ -1, 1, 554
};
-static int parser_action_row592[] = {
+static int parser_action_row603[] = {
3,
- -1, 3, 591,
- 83, 0, 48,
- 84, 0, 49
+ -1, 3, 602,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row593[] = {
- 2,
- -1, 1, 323,
- 58, 0, 699
+static int parser_action_row604[] = {
+ 5,
+ -1, 1, 80,
+ 18, 0, 200,
+ 19, 0, 201,
+ 20, 0, 202,
+ 21, 0, 203
};
-static int parser_action_row594[] = {
+static int parser_action_row605[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row595[] = {
+static int parser_action_row606[] = {
+ 2,
+ -1, 1, 310,
+ 55, 0, 713
+};
+static int parser_action_row607[] = {
1,
- -1, 1, 345
+ -1, 1, 337
};
-static int parser_action_row596[] = {
+static int parser_action_row608[] = {
1,
- -1, 1, 346
+ -1, 1, 336
};
-static int parser_action_row597[] = {
+static int parser_action_row609[] = {
1,
- -1, 1, 344
+ -1, 1, 335
};
-static int parser_action_row598[] = {
+static int parser_action_row610[] = {
3,
- -1, 1, 319,
- 54, 0, 703,
- 82, 0, 180
+ -1, 1, 306,
+ 51, 0, 716,
+ 80, 0, 184
};
-static int parser_action_row599[] = {
+static int parser_action_row611[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row600[] = {
+static int parser_action_row612[] = {
1,
- -1, 1, 158
+ -1, 1, 142
};
-static int parser_action_row601[] = {
+static int parser_action_row613[] = {
3,
- -1, 3, 600,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 612,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row602[] = {
+static int parser_action_row614[] = {
1,
- -1, 1, 204
+ -1, 1, 188
};
-static int parser_action_row603[] = {
+static int parser_action_row615[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row604[] = {
+static int parser_action_row616[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row605[] = {
+static int parser_action_row617[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row606[] = {
+static int parser_action_row618[] = {
1,
-1, 1, 822
};
-static int parser_action_row607[] = {
+static int parser_action_row619[] = {
2,
- -1, 1, 356,
- 58, 0, 603
+ -1, 1, 347,
+ 55, 0, 615
};
-static int parser_action_row608[] = {
+static int parser_action_row620[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row609[] = {
+static int parser_action_row621[] = {
2,
- -1, 1, 360,
- 60, 0, 190
+ -1, 1, 351,
+ 57, 0, 194
};
-static int parser_action_row610[] = {
+static int parser_action_row622[] = {
2,
- -1, 1, 92,
- 14, 0, 712
+ -1, 1, 77,
+ 14, 0, 725
};
-static int parser_action_row611[] = {
+static int parser_action_row623[] = {
2,
- -1, 3, 610,
- 84, 0, 714
+ -1, 3, 622,
+ 82, 0, 727
};
-static int parser_action_row612[] = {
+static int parser_action_row624[] = {
3,
- -1, 3, 611,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 623,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row613[] = {
+static int parser_action_row625[] = {
2,
- -1, 1, 92,
- 14, 0, 712
+ -1, 1, 77,
+ 14, 0, 725
};
-static int parser_action_row614[] = {
+static int parser_action_row626[] = {
2,
- -1, 1, 116,
- 61, 0, 717
+ -1, 1, 100,
+ 58, 0, 730
};
-static int parser_action_row615[] = {
+static int parser_action_row627[] = {
1,
- -1, 1, 118
+ -1, 1, 102
};
-static int parser_action_row616[] = {
+static int parser_action_row628[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row617[] = {
+static int parser_action_row629[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row618[] = {
+static int parser_action_row630[] = {
4,
- -1, 1, 135,
- 4, 0, 720,
- 14, 0, 721,
- 15, 0, 722
+ -1, 1, 119,
+ 4, 0, 733,
+ 14, 0, 734,
+ 15, 0, 735
};
-static int parser_action_row619[] = {
+static int parser_action_row631[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row620[] = {
+static int parser_action_row632[] = {
1,
- -1, 1, 123
+ -1, 1, 107
};
-static int parser_action_row621[] = {
+static int parser_action_row633[] = {
2,
- -1, 1, 372,
- 60, 0, 189
+ -1, 1, 363,
+ 57, 0, 193
};
-static int parser_action_row622[] = {
+static int parser_action_row634[] = {
2,
- -1, 3, 621,
- 60, 0, 190
+ -1, 3, 633,
+ 57, 0, 194
};
-static int parser_action_row623[] = {
+static int parser_action_row635[] = {
2,
-1, 1, 51,
- 56, 0, 727
+ 53, 0, 740
};
-static int parser_action_row624[] = {
+static int parser_action_row636[] = {
2,
- -1, 3, 623,
- 83, 0, 729
+ -1, 3, 635,
+ 81, 0, 742
};
-static int parser_action_row625[] = {
+static int parser_action_row637[] = {
3,
- -1, 3, 624,
- 83, 0, 730,
- 84, 0, 621
+ -1, 3, 636,
+ 81, 0, 743,
+ 82, 0, 633
};
-static int parser_action_row626[] = {
+static int parser_action_row638[] = {
1,
- -1, 1, 285
+ -1, 1, 272
};
-static int parser_action_row627[] = {
+static int parser_action_row639[] = {
1,
- -1, 1, 196
+ -1, 1, 180
};
-static int parser_action_row628[] = {
+static int parser_action_row640[] = {
3,
- -1, 3, 627,
- 34, 0, 732,
- 54, 0, 733
+ -1, 3, 639,
+ 31, 0, 745,
+ 51, 0, 746
};
-static int parser_action_row629[] = {
+static int parser_action_row641[] = {
4,
- -1, 1, 280,
- 61, 0, 734,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 267,
+ 58, 0, 747,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row630[] = {
+static int parser_action_row642[] = {
4,
- -1, 1, 282,
- 61, 0, 736,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 269,
+ 58, 0, 749,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row631[] = {
+static int parser_action_row643[] = {
1,
- -1, 1, 193
+ -1, 1, 177
};
-static int parser_action_row632[] = {
+static int parser_action_row644[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row633[] = {
+static int parser_action_row645[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row634[] = {
+static int parser_action_row646[] = {
3,
- -1, 1, 365,
- 12, 0, 740,
- 84, 0, 383
+ -1, 1, 356,
+ 12, 0, 753,
+ 82, 0, 389
};
-static int parser_action_row635[] = {
+static int parser_action_row647[] = {
1,
- -1, 1, 312
+ -1, 1, 299
};
-static int parser_action_row636[] = {
+static int parser_action_row648[] = {
1,
- -1, 1, 352
+ -1, 1, 343
};
-static int parser_action_row637[] = {
+static int parser_action_row649[] = {
2,
- -1, 3, 636,
- 55, 0, 741
+ -1, 3, 648,
+ 52, 0, 754
};
-static int parser_action_row638[] = {
+static int parser_action_row650[] = {
1,
- -1, 1, 347
+ -1, 1, 338
};
-static int parser_action_row639[] = {
+static int parser_action_row651[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row640[] = {
+static int parser_action_row652[] = {
3,
- -1, 3, 639,
- 83, 0, 48,
- 84, 0, 49
+ -1, 3, 651,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row641[] = {
+static int parser_action_row653[] = {
2,
- -1, 3, 640,
- 85, 0, 744
+ -1, 3, 652,
+ 83, 0, 757
};
-static int parser_action_row642[] = {
+static int parser_action_row654[] = {
1,
- -1, 1, 507
+ -1, 1, 499
};
-static int parser_action_row643[] = {
+static int parser_action_row655[] = {
1,
- -1, 1, 541
+ -1, 1, 536
};
-static int parser_action_row644[] = {
+static int parser_action_row656[] = {
3,
- -1, 3, 643,
- 34, 0, 745,
- 54, 0, 746
+ -1, 3, 655,
+ 31, 0, 758,
+ 51, 0, 759
};
-static int parser_action_row645[] = {
+static int parser_action_row657[] = {
1,
- -1, 1, 536
+ -1, 1, 531
};
-static int parser_action_row646[] = {
+static int parser_action_row658[] = {
1,
- -1, 1, 538
+ -1, 1, 533
};
-static int parser_action_row647[] = {
+static int parser_action_row659[] = {
1,
- -1, 1, 176
+ -1, 1, 160
};
-static int parser_action_row648[] = {
+static int parser_action_row660[] = {
1,
- -1, 1, 209
+ -1, 1, 193
};
-static int parser_action_row649[] = {
+static int parser_action_row661[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row650[] = {
+static int parser_action_row662[] = {
1,
- -1, 1, 231
+ -1, 1, 215
};
-static int parser_action_row651[] = {
+static int parser_action_row663[] = {
26,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 56, 1, 349,
- 64, 1, 349,
- 66, 1, 349,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 53, 1, 340,
+ 61, 1, 340,
+ 63, 1, 340,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row652[] = {
+static int parser_action_row664[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 749,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 9, 0, 762,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row653[] = {
+static int parser_action_row665[] = {
2,
- -1, 3, 652,
- 84, 0, 754
+ -1, 3, 664,
+ 82, 0, 767
};
-static int parser_action_row654[] = {
+static int parser_action_row666[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row655[] = {
+static int parser_action_row667[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row656[] = {
+static int parser_action_row668[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row657[] = {
+static int parser_action_row669[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 749,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 9, 0, 762,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row658[] = {
+static int parser_action_row670[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row659[] = {
+static int parser_action_row671[] = {
25,
- -1, 1, 180,
- 12, 0, 152,
- 25, 0, 153,
- 27, 1, 632,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 164,
+ 12, 0, 155,
+ 22, 0, 156,
+ 24, 1, 631,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row660[] = {
+static int parser_action_row672[] = {
3,
- -1, 1, 185,
- 27, 1, 637,
- 52, 0, 171
+ -1, 1, 169,
+ 24, 1, 636,
+ 49, 0, 175
};
-static int parser_action_row661[] = {
+static int parser_action_row673[] = {
3,
- -1, 1, 182,
- 27, 1, 634,
- 52, 0, 171
+ -1, 1, 166,
+ 24, 1, 633,
+ 49, 0, 175
};
-static int parser_action_row662[] = {
+static int parser_action_row674[] = {
2,
- -1, 1, 184,
- 27, 1, 636
+ -1, 1, 168,
+ 24, 1, 635
};
-static int parser_action_row663[] = {
+static int parser_action_row675[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 174,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 178,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row664[] = {
+static int parser_action_row676[] = {
2,
- -1, 3, 663,
- 11, 0, 766
+ -1, 3, 675,
+ 11, 0, 779
};
-static int parser_action_row665[] = {
+static int parser_action_row677[] = {
1,
- -1, 1, 226
+ -1, 1, 210
};
-static int parser_action_row666[] = {
+static int parser_action_row678[] = {
1,
- -1, 1, 228
+ -1, 1, 212
};
-static int parser_action_row667[] = {
+static int parser_action_row679[] = {
4,
- -1, 3, 666,
- 56, 0, 205,
- 64, 0, 206,
- 66, 0, 767
+ -1, 3, 678,
+ 53, 0, 209,
+ 61, 0, 210,
+ 63, 0, 780
};
-static int parser_action_row668[] = {
+static int parser_action_row680[] = {
3,
- -1, 3, 667,
- 44, 0, 769,
- 85, 0, 770
+ -1, 3, 679,
+ 41, 0, 782,
+ 83, 0, 783
};
-static int parser_action_row669[] = {
+static int parser_action_row681[] = {
29,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 56, 1, 349,
- 61, 1, 349,
- 62, 1, 349,
- 63, 1, 349,
- 64, 1, 349,
- 66, 1, 349,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 53, 1, 340,
+ 58, 1, 340,
+ 59, 1, 340,
+ 60, 1, 340,
+ 61, 1, 340,
+ 63, 1, 340,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row670[] = {
+static int parser_action_row682[] = {
3,
- -1, 1, 364,
- 12, 0, 773,
- 84, 0, 222
+ -1, 1, 355,
+ 12, 0, 786,
+ 82, 0, 226
};
-static int parser_action_row671[] = {
+static int parser_action_row683[] = {
31,
- -1, 1, 367,
- 9, 0, 649,
+ -1, 1, 358,
+ 9, 0, 661,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 27, 0, 654,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 24, 0, 666,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row672[] = {
+static int parser_action_row684[] = {
2,
- -1, 3, 671,
- 27, 0, 777
+ -1, 3, 683,
+ 24, 0, 790
};
-static int parser_action_row673[] = {
+static int parser_action_row685[] = {
+ 1,
+ -1, 1, 629
+};
+static int parser_action_row686[] = {
1,
-1, 1, 630
};
-static int parser_action_row674[] = {
+static int parser_action_row687[] = {
1,
- -1, 1, 631
+ -1, 1, 638
};
-static int parser_action_row675[] = {
+static int parser_action_row688[] = {
1,
-1, 1, 639
};
-static int parser_action_row676[] = {
+static int parser_action_row689[] = {
1,
- -1, 1, 640
+ -1, 1, 641
};
-static int parser_action_row677[] = {
+static int parser_action_row690[] = {
1,
- -1, 1, 642
+ -1, 1, 640
};
-static int parser_action_row678[] = {
+static int parser_action_row691[] = {
1,
- -1, 1, 641
+ -1, 1, 642
};
-static int parser_action_row679[] = {
+static int parser_action_row692[] = {
1,
-1, 1, 643
};
-static int parser_action_row680[] = {
- 1,
- -1, 1, 644
-};
-static int parser_action_row681[] = {
+static int parser_action_row693[] = {
4,
- -1, 1, 366,
- 12, 0, 778,
- 83, 0, 48,
- 84, 0, 224
+ -1, 1, 357,
+ 12, 0, 791,
+ 81, 0, 48,
+ 82, 0, 228
};
-static int parser_action_row682[] = {
+static int parser_action_row694[] = {
1,
- -1, 1, 235
+ -1, 1, 219
};
-static int parser_action_row683[] = {
+static int parser_action_row695[] = {
2,
- -1, 3, 682,
- 52, 0, 171
+ -1, 3, 694,
+ 49, 0, 175
};
-static int parser_action_row684[] = {
+static int parser_action_row696[] = {
3,
- -1, 3, 683,
- 55, 0, 781,
- 58, 0, 556
+ -1, 3, 695,
+ 52, 0, 794,
+ 55, 0, 566
};
-static int parser_action_row685[] = {
+static int parser_action_row697[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row686[] = {
+static int parser_action_row698[] = {
2,
- -1, 3, 685,
- 84, 0, 783
+ -1, 3, 697,
+ 82, 0, 796
};
-static int parser_action_row687[] = {
+static int parser_action_row699[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row688[] = {
+static int parser_action_row700[] = {
2,
- -1, 3, 687,
- 85, 0, 785
+ -1, 3, 699,
+ 83, 0, 798
};
-static int parser_action_row689[] = {
+static int parser_action_row701[] = {
1,
- -1, 1, 251
+ -1, 1, 235
};
-static int parser_action_row690[] = {
+static int parser_action_row702[] = {
1,
- -1, 1, 280
+ -1, 1, 267
};
-static int parser_action_row691[] = {
+static int parser_action_row703[] = {
1,
- -1, 1, 282
+ -1, 1, 269
};
-static int parser_action_row692[] = {
+static int parser_action_row704[] = {
3,
- -1, 3, 691,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 703,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row693[] = {
+static int parser_action_row705[] = {
2,
- -1, 1, 161,
- 58, 0, 787
+ -1, 1, 145,
+ 55, 0, 800
};
-static int parser_action_row694[] = {
+static int parser_action_row706[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row695[] = {
+static int parser_action_row707[] = {
2,
-1, 1, 42,
13, 0, 27
};
-static int parser_action_row696[] = {
+static int parser_action_row708[] = {
4,
- -1, 3, 695,
- 16, 0, 594,
- 17, 0, 595,
- 84, 0, 596
+ -1, 3, 707,
+ 6, 0, 606,
+ 17, 0, 607,
+ 82, 0, 608
};
-static int parser_action_row697[] = {
+static int parser_action_row709[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row698[] = {
+static int parser_action_row710[] = {
2,
- -1, 3, 697,
- 84, 0, 222
+ -1, 3, 709,
+ 82, 0, 226
};
-static int parser_action_row699[] = {
+static int parser_action_row711[] = {
3,
- -1, 3, 698,
- 83, 0, 48,
- 84, 0, 224
+ -1, 3, 710,
+ 81, 0, 48,
+ 82, 0, 228
};
-static int parser_action_row700[] = {
+static int parser_action_row712[] = {
+ 4,
+ -1, 3, 711,
+ 6, 0, 606,
+ 17, 0, 607,
+ 82, 0, 608
+};
+static int parser_action_row713[] = {
+ 2,
+ -1, 3, 712,
+ 52, 0, 809
+};
+static int parser_action_row714[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row701[] = {
+static int parser_action_row715[] = {
1,
-1, 1, 814
};
-static int parser_action_row702[] = {
- 2,
- -1, 1, 324,
- 58, 0, 699
-};
-static int parser_action_row703[] = {
+static int parser_action_row716[] = {
2,
- -1, 3, 702,
- 55, 0, 797
+ -1, 1, 311,
+ 55, 0, 713
};
-static int parser_action_row704[] = {
+static int parser_action_row717[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row705[] = {
+static int parser_action_row718[] = {
1,
- -1, 1, 320
+ -1, 1, 307
};
-static int parser_action_row706[] = {
+static int parser_action_row719[] = {
3,
- -1, 3, 705,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 718,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row707[] = {
+static int parser_action_row720[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row708[] = {
+static int parser_action_row721[] = {
1,
- -1, 1, 302
+ -1, 1, 290
};
-static int parser_action_row709[] = {
+static int parser_action_row722[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row710[] = {
+static int parser_action_row723[] = {
21,
- -1, 1, 367,
- 12, 0, 802,
- 25, 0, 803,
- 34, 0, 804,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 22, 0, 817,
+ 31, 0, 818,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row711[] = {
+static int parser_action_row724[] = {
1,
-1, 1, 823
};
-static int parser_action_row712[] = {
+static int parser_action_row725[] = {
2,
- -1, 3, 711,
- 84, 0, 831
+ -1, 3, 724,
+ 82, 0, 847
};
-static int parser_action_row713[] = {
+static int parser_action_row726[] = {
4,
-1, 1, 42,
- 0, 0, 82,
- 1, 0, 83,
+ 0, 0, 83,
+ 1, 0, 84,
13, 0, 27
};
-static int parser_action_row714[] = {
+static int parser_action_row727[] = {
3,
- -1, 3, 713,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 726,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row715[] = {
+static int parser_action_row728[] = {
2,
- -1, 1, 361,
- 60, 0, 190
+ -1, 1, 352,
+ 57, 0, 194
};
-static int parser_action_row716[] = {
+static int parser_action_row729[] = {
1,
-1, 1, 18
};
-static int parser_action_row717[] = {
+static int parser_action_row730[] = {
3,
- -1, 3, 716,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 729,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row718[] = {
+static int parser_action_row731[] = {
1,
- -1, 1, 119
+ -1, 1, 103
};
-static int parser_action_row719[] = {
+static int parser_action_row732[] = {
2,
- -1, 1, 126,
- 84, 0, 838
+ -1, 1, 110,
+ 82, 0, 854
};
-static int parser_action_row720[] = {
+static int parser_action_row733[] = {
3,
- -1, 3, 719,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 732,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row721[] = {
+static int parser_action_row734[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row722[] = {
- 6,
+static int parser_action_row735[] = {
+ 4,
-1, 1, 42,
- 0, 0, 82,
- 1, 0, 83,
- 13, 0, 27,
- 19, 0, 843,
- 20, 0, 844
+ 0, 0, 83,
+ 1, 0, 84,
+ 13, 0, 27
};
-static int parser_action_row723[] = {
+static int parser_action_row736[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row724[] = {
+static int parser_action_row737[] = {
3,
- -1, 1, 135,
- 4, 0, 720,
- 15, 0, 848
+ -1, 1, 119,
+ 4, 0, 733,
+ 15, 0, 862
};
-static int parser_action_row725[] = {
+static int parser_action_row738[] = {
3,
- -1, 3, 724,
- 31, 0, 34,
- 96, 0, 56
+ -1, 3, 737,
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row726[] = {
+static int parser_action_row739[] = {
1,
- -1, 1, 393
+ -1, 1, 384
};
-static int parser_action_row727[] = {
+static int parser_action_row740[] = {
1,
- -1, 1, 122
+ -1, 1, 106
};
-static int parser_action_row728[] = {
+static int parser_action_row741[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row729[] = {
+static int parser_action_row742[] = {
5,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 31, 0, 34,
- 96, 0, 56
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row730[] = {
+static int parser_action_row743[] = {
1,
- -1, 1, 373
+ -1, 1, 364
};
-static int parser_action_row731[] = {
+static int parser_action_row744[] = {
2,
- -1, 1, 375,
- 60, 0, 189
+ -1, 1, 366,
+ 57, 0, 193
};
-static int parser_action_row732[] = {
+static int parser_action_row745[] = {
2,
- -1, 3, 731,
- 83, 0, 861
+ -1, 3, 744,
+ 81, 0, 875
};
-static int parser_action_row733[] = {
+static int parser_action_row746[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row734[] = {
+static int parser_action_row747[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row735[] = {
+static int parser_action_row748[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row736[] = {
+static int parser_action_row749[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row737[] = {
+static int parser_action_row750[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row738[] = {
+static int parser_action_row751[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row739[] = {
+static int parser_action_row752[] = {
1,
- -1, 1, 198
+ -1, 1, 182
};
-static int parser_action_row740[] = {
+static int parser_action_row753[] = {
1,
- -1, 1, 200
+ -1, 1, 184
};
-static int parser_action_row741[] = {
+static int parser_action_row754[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row742[] = {
+static int parser_action_row755[] = {
1,
- -1, 1, 350
+ -1, 1, 341
};
-static int parser_action_row743[] = {
+static int parser_action_row756[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row744[] = {
+static int parser_action_row757[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row745[] = {
+static int parser_action_row758[] = {
4,
- -1, 1, 534,
- 56, 1, 536,
- 64, 1, 536,
- 66, 1, 536
+ -1, 1, 528,
+ 53, 1, 531,
+ 61, 1, 531,
+ 63, 1, 531
};
-static int parser_action_row746[] = {
+static int parser_action_row759[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row747[] = {
+static int parser_action_row760[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row748[] = {
+static int parser_action_row761[] = {
1,
- -1, 1, 210
+ -1, 1, 194
};
-static int parser_action_row749[] = {
+static int parser_action_row762[] = {
2,
- -1, 1, 197,
- 27, 1, 649
+ -1, 1, 181,
+ 24, 1, 648
};
-static int parser_action_row750[] = {
+static int parser_action_row763[] = {
3,
- -1, 1, 169,
- 27, 1, 628,
- 52, 1, 727
+ -1, 1, 153,
+ 24, 1, 627,
+ 49, 1, 726
};
-static int parser_action_row751[] = {
+static int parser_action_row764[] = {
30,
- -1, 1, 367,
- 9, 0, 873,
+ -1, 1, 358,
+ 9, 0, 887,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row752[] = {
+static int parser_action_row765[] = {
1,
- -1, 1, 672
+ -1, 1, 671
};
-static int parser_action_row753[] = {
+static int parser_action_row766[] = {
1,
- -1, 1, 629
+ -1, 1, 628
};
-static int parser_action_row754[] = {
+static int parser_action_row767[] = {
2,
- -1, 3, 753,
- 52, 0, 171
+ -1, 3, 766,
+ 49, 0, 175
};
-static int parser_action_row755[] = {
+static int parser_action_row768[] = {
3,
- -1, 1, 166,
- 59, 0, 287,
- 82, 0, 180
+ -1, 1, 150,
+ 56, 0, 292,
+ 80, 0, 184
};
-static int parser_action_row756[] = {
+static int parser_action_row769[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row757[] = {
+static int parser_action_row770[] = {
1,
- -1, 1, 230
+ -1, 1, 214
};
-static int parser_action_row758[] = {
+static int parser_action_row771[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row759[] = {
+static int parser_action_row772[] = {
1,
- -1, 1, 675
+ -1, 1, 674
};
-static int parser_action_row760[] = {
+static int parser_action_row773[] = {
2,
- -1, 3, 759,
- 52, 0, 171
+ -1, 3, 772,
+ 49, 0, 175
};
-static int parser_action_row761[] = {
+static int parser_action_row774[] = {
3,
- -1, 3, 760,
- 54, 0, 881,
- 84, 0, 294
+ -1, 3, 773,
+ 51, 0, 895,
+ 82, 0, 299
};
-static int parser_action_row762[] = {
+static int parser_action_row775[] = {
1,
- -1, 1, 633
+ -1, 1, 632
};
-static int parser_action_row763[] = {
+static int parser_action_row776[] = {
2,
- -1, 1, 186,
- 27, 1, 638
+ -1, 1, 170,
+ 24, 1, 637
};
-static int parser_action_row764[] = {
+static int parser_action_row777[] = {
2,
- -1, 1, 183,
- 27, 1, 635
+ -1, 1, 167,
+ 24, 1, 634
};
-static int parser_action_row765[] = {
+static int parser_action_row778[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row766[] = {
+static int parser_action_row779[] = {
2,
- -1, 3, 765,
- 27, 0, 884
+ -1, 3, 778,
+ 24, 0, 898
};
-static int parser_action_row767[] = {
+static int parser_action_row780[] = {
3,
- -1, 3, 766,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 779,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row768[] = {
+static int parser_action_row781[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row769[] = {
+static int parser_action_row782[] = {
4,
- -1, 1, 287,
- 61, 0, 887,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 274,
+ 58, 0, 901,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row770[] = {
+static int parser_action_row783[] = {
26,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 56, 1, 349,
- 64, 1, 349,
- 66, 1, 349,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 53, 1, 340,
+ 61, 1, 340,
+ 63, 1, 340,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row771[] = {
+static int parser_action_row784[] = {
4,
- -1, 1, 281,
- 61, 0, 890,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 268,
+ 58, 0, 904,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row772[] = {
+static int parser_action_row785[] = {
4,
- -1, 1, 283,
- 61, 0, 892,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 270,
+ 58, 0, 906,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row773[] = {
+static int parser_action_row786[] = {
2,
- -1, 1, 194,
- 27, 1, 646
+ -1, 1, 178,
+ 24, 1, 645
};
-static int parser_action_row774[] = {
+static int parser_action_row787[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row775[] = {
+static int parser_action_row788[] = {
3,
- -1, 3, 774,
- 9, 0, 649,
- 27, 0, 654
+ -1, 3, 787,
+ 9, 0, 661,
+ 24, 0, 666
};
-static int parser_action_row776[] = {
+static int parser_action_row789[] = {
3,
- -1, 3, 775,
+ -1, 3, 788,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row777[] = {
+static int parser_action_row790[] = {
1,
- -1, 1, 229
+ -1, 1, 213
};
-static int parser_action_row778[] = {
+static int parser_action_row791[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row779[] = {
+static int parser_action_row792[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row780[] = {
+static int parser_action_row793[] = {
3,
- -1, 1, 365,
- 12, 0, 899,
- 84, 0, 383
+ -1, 1, 356,
+ 12, 0, 913,
+ 82, 0, 389
};
-static int parser_action_row781[] = {
+static int parser_action_row794[] = {
1,
- -1, 1, 234
+ -1, 1, 218
};
-static int parser_action_row782[] = {
+static int parser_action_row795[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row783[] = {
+static int parser_action_row796[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row784[] = {
+static int parser_action_row797[] = {
1,
- -1, 1, 359
+ -1, 1, 350
};
-static int parser_action_row785[] = {
+static int parser_action_row798[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row786[] = {
+static int parser_action_row799[] = {
4,
- -1, 1, 278,
- 56, 1, 280,
- 64, 1, 280,
- 66, 1, 280
+ -1, 1, 264,
+ 53, 1, 267,
+ 61, 1, 267,
+ 63, 1, 267
};
-static int parser_action_row787[] = {
+static int parser_action_row800[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row788[] = {
+static int parser_action_row801[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row789[] = {
+static int parser_action_row802[] = {
1,
-1, 1, 808
};
-static int parser_action_row790[] = {
+static int parser_action_row803[] = {
2,
- -1, 1, 162,
- 58, 0, 787
+ -1, 1, 146,
+ 55, 0, 800
};
-static int parser_action_row791[] = {
+static int parser_action_row804[] = {
2,
- -1, 3, 790,
- 57, 0, 906
+ -1, 3, 803,
+ 54, 0, 920
};
-static int parser_action_row792[] = {
+static int parser_action_row805[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row793[] = {
+static int parser_action_row806[] = {
2,
- -1, 1, 562,
- 82, 0, 463
+ -1, 1, 557,
+ 80, 0, 471
};
-static int parser_action_row794[] = {
+static int parser_action_row807[] = {
1,
- -1, 1, 288
+ -1, 1, 275
};
-static int parser_action_row795[] = {
+static int parser_action_row808[] = {
2,
- -1, 3, 794,
- 84, 0, 383
+ -1, 3, 807,
+ 82, 0, 389
};
-static int parser_action_row796[] = {
+static int parser_action_row809[] = {
+ 13,
+ -1, 1, 306,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 51, 0, 923,
+ 80, 0, 184,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
+};
+static int parser_action_row810[] = {
+ 1,
+ -1, 1, 304
+};
+static int parser_action_row811[] = {
2,
-1, 1, 42,
13, 0, 27
};
-static int parser_action_row797[] = {
+static int parser_action_row812[] = {
1,
-1, 1, 815
};
-static int parser_action_row798[] = {
- 1,
- -1, 1, 317
-};
-static int parser_action_row799[] = {
+static int parser_action_row813[] = {
35,
- -1, 1, 367,
- 12, 0, 152,
+ -1, 1, 358,
+ 12, 0, 155,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 153,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 34, 0, 154,
- 36, 0, 910,
- 37, 0, 911,
- 38, 0, 912,
- 39, 0, 913,
- 40, 0, 39,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 50, 0, 338,
- 51, 0, 157,
- 53, 0, 914,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 82, 0, 180,
- 83, 0, 915,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 156,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 31, 0, 157,
+ 33, 0, 928,
+ 34, 0, 929,
+ 35, 0, 930,
+ 36, 0, 931,
+ 37, 0, 39,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 47, 0, 344,
+ 48, 0, 160,
+ 50, 0, 932,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 80, 0, 184,
+ 81, 0, 933,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row800[] = {
+static int parser_action_row814[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row801[] = {
+static int parser_action_row815[] = {
2,
- -1, 3, 800,
- 57, 0, 933
+ -1, 3, 814,
+ 54, 0, 951
};
-static int parser_action_row802[] = {
+static int parser_action_row816[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row803[] = {
+static int parser_action_row817[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row804[] = {
+static int parser_action_row818[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row805[] = {
+static int parser_action_row819[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row806[] = {
+static int parser_action_row820[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row807[] = {
+static int parser_action_row821[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row808[] = {
+static int parser_action_row822[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row809[] = {
+static int parser_action_row823[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row810[] = {
+static int parser_action_row824[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row811[] = {
+static int parser_action_row825[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row812[] = {
+static int parser_action_row826[] = {
16,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 944,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 54, 0, 812,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 962,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 51, 0, 826,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row813[] = {
+static int parser_action_row827[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row814[] = {
+static int parser_action_row828[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row815[] = {
+static int parser_action_row829[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row816[] = {
+static int parser_action_row830[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row817[] = {
+static int parser_action_row831[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row818[] = {
+static int parser_action_row832[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row819[] = {
+static int parser_action_row833[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row820[] = {
+static int parser_action_row834[] = {
1,
- -1, 1, 454
+ -1, 1, 450
};
-static int parser_action_row821[] = {
+static int parser_action_row835[] = {
3,
- -1, 3, 820,
- 44, 0, 954,
- 85, 0, 955
+ -1, 3, 834,
+ 41, 0, 972,
+ 83, 0, 973
};
-static int parser_action_row822[] = {
+static int parser_action_row836[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row823[] = {
+static int parser_action_row837[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row824[] = {
+static int parser_action_row838[] = {
4,
- -1, 1, 403,
- 32, 0, 958,
- 33, 0, 959,
- 35, 0, 960
+ -1, 1, 392,
+ 29, 0, 976,
+ 30, 0, 977,
+ 32, 0, 978
};
-static int parser_action_row825[] = {
+static int parser_action_row839[] = {
1,
- -1, 1, 405
+ -1, 1, 394
};
-static int parser_action_row826[] = {
+static int parser_action_row840[] = {
3,
- -1, 1, 410,
- 76, 0, 961,
- 79, 0, 962
+ -1, 1, 399,
+ 74, 0, 979,
+ 77, 0, 980
};
-static int parser_action_row827[] = {
+static int parser_action_row841[] = {
11,
- -1, 1, 412,
- 42, 0, 963,
- 67, 0, 964,
- 68, 0, 965,
- 72, 0, 966,
- 73, 0, 967,
- 74, 0, 968,
- 75, 0, 969,
- 77, 0, 970,
- 78, 0, 971,
- 80, 0, 972
+ -1, 1, 401,
+ 39, 0, 981,
+ 64, 0, 982,
+ 65, 0, 983,
+ 70, 0, 984,
+ 71, 0, 985,
+ 72, 0, 986,
+ 73, 0, 987,
+ 75, 0, 988,
+ 76, 0, 989,
+ 78, 0, 990
};
-static int parser_action_row828[] = {
+static int parser_action_row842[] = {
4,
- -1, 1, 423,
- 69, 0, 973,
- 70, 0, 974,
- 71, 0, 975
+ -1, 1, 412,
+ 66, 0, 991,
+ 68, 0, 992,
+ 69, 0, 993
};
-static int parser_action_row829[] = {
+static int parser_action_row843[] = {
1,
- -1, 1, 426
+ -1, 1, 415
};
-static int parser_action_row830[] = {
+static int parser_action_row844[] = {
+ 2,
+ -1, 1, 419,
+ 67, 0, 994
+};
+static int parser_action_row845[] = {
1,
- -1, 1, 430
+ -1, 1, 421
};
-static int parser_action_row831[] = {
+static int parser_action_row846[] = {
3,
- -1, 1, 433,
- 64, 0, 976,
- 66, 0, 977
+ -1, 1, 424,
+ 61, 0, 995,
+ 63, 0, 996
};
-static int parser_action_row832[] = {
+static int parser_action_row847[] = {
+ 1,
+ -1, 1, 428
+};
+static int parser_action_row848[] = {
2,
- -1, 1, 362,
- 60, 0, 190
+ -1, 1, 353,
+ 57, 0, 194
};
-static int parser_action_row833[] = {
+static int parser_action_row849[] = {
2,
- -1, 3, 832,
- 84, 0, 978
+ -1, 3, 848,
+ 82, 0, 997
};
-static int parser_action_row834[] = {
+static int parser_action_row850[] = {
1,
- -1, 1, 90
+ -1, 1, 75
};
-static int parser_action_row835[] = {
+static int parser_action_row851[] = {
1,
- -1, 1, 322
+ -1, 1, 309
};
-static int parser_action_row836[] = {
+static int parser_action_row852[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row837[] = {
+static int parser_action_row853[] = {
1,
-1, 1, 16
};
-static int parser_action_row838[] = {
+static int parser_action_row854[] = {
1,
-1, 1, 17
};
-static int parser_action_row839[] = {
+static int parser_action_row855[] = {
3,
- -1, 1, 319,
- 59, 0, 616,
- 82, 0, 180
+ -1, 1, 306,
+ 56, 0, 628,
+ 80, 0, 184
};
-static int parser_action_row840[] = {
+static int parser_action_row856[] = {
2,
- -1, 3, 839,
- 55, 0, 986
+ -1, 3, 855,
+ 52, 0, 1005
};
-static int parser_action_row841[] = {
+static int parser_action_row857[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 58, 0, 987
-};
-static int parser_action_row842[] = {
- 1,
- -1, 1, 164
-};
-static int parser_action_row843[] = {
- 20,
- -1, 3, 842,
- 44, 0, 991,
- 50, 0, 338,
- 56, 0, 479,
- 67, 0, 480,
- 68, 0, 481,
- 69, 0, 482,
- 70, 0, 483,
- 71, 0, 484,
- 72, 0, 485,
- 73, 0, 486,
- 74, 0, 487,
- 75, 0, 488,
- 76, 0, 489,
- 77, 0, 490,
- 78, 0, 491,
- 79, 0, 492,
- 80, 0, 493,
- 83, 0, 339,
- 84, 0, 494
+ 55, 0, 1006
};
-static int parser_action_row844[] = {
+static int parser_action_row858[] = {
1,
- -1, 1, 394
+ -1, 1, 148
};
-static int parser_action_row845[] = {
- 2,
- -1, 1, 149,
- 89, 0, 997
+static int parser_action_row859[] = {
+ 21,
+ -1, 3, 858,
+ 41, 0, 1010,
+ 47, 0, 344,
+ 53, 0, 487,
+ 64, 0, 488,
+ 65, 0, 489,
+ 66, 0, 490,
+ 67, 0, 491,
+ 68, 0, 492,
+ 69, 0, 493,
+ 70, 0, 494,
+ 71, 0, 495,
+ 72, 0, 496,
+ 73, 0, 497,
+ 74, 0, 498,
+ 75, 0, 499,
+ 76, 0, 500,
+ 77, 0, 501,
+ 78, 0, 502,
+ 81, 0, 345,
+ 82, 0, 503
};
-static int parser_action_row846[] = {
+static int parser_action_row860[] = {
3,
- -1, 1, 93,
- 0, 1, 398,
- 1, 1, 398
+ -1, 1, 78,
+ 0, 1, 387,
+ 1, 1, 387
};
-static int parser_action_row847[] = {
+static int parser_action_row861[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row848[] = {
+static int parser_action_row862[] = {
2,
- -1, 1, 378,
- 9, 0, 1000
+ -1, 1, 369,
+ 9, 0, 1017
};
-static int parser_action_row849[] = {
+static int parser_action_row863[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row850[] = {
+static int parser_action_row864[] = {
3,
- -1, 3, 849,
- 31, 0, 34,
- 96, 0, 56
+ -1, 3, 863,
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row851[] = {
+static int parser_action_row865[] = {
1,
- -1, 1, 396
+ -1, 1, 385
};
-static int parser_action_row852[] = {
+static int parser_action_row866[] = {
2,
- -1, 3, 851,
- 83, 0, 1004
+ -1, 3, 865,
+ 81, 0, 1021
};
-static int parser_action_row853[] = {
+static int parser_action_row867[] = {
1,
-1, 1, 798
};
-static int parser_action_row854[] = {
+static int parser_action_row868[] = {
1,
-1, 1, 800
};
-static int parser_action_row855[] = {
+static int parser_action_row869[] = {
3,
- -1, 3, 854,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 868,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row856[] = {
+static int parser_action_row870[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row857[] = {
+static int parser_action_row871[] = {
1,
-1, 1, 818
};
-static int parser_action_row858[] = {
- 5,
- -1, 1, 42,
- 9, 0, 1010,
+static int parser_action_row872[] = {
+ 6,
+ -1, 1, 42,
+ 6, 0, 1027,
+ 9, 0, 1028,
13, 0, 27,
- 44, 0, 1011,
- 84, 0, 1012
+ 41, 0, 1029,
+ 82, 0, 1030
};
-static int parser_action_row859[] = {
+static int parser_action_row873[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row860[] = {
+static int parser_action_row874[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row861[] = {
+static int parser_action_row875[] = {
5,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 31, 0, 34,
- 96, 0, 56
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row862[] = {
+static int parser_action_row876[] = {
1,
- -1, 1, 374
+ -1, 1, 365
};
-static int parser_action_row863[] = {
+static int parser_action_row877[] = {
2,
- -1, 3, 862,
- 48, 0, 1027
+ -1, 3, 876,
+ 45, 0, 1043
};
-static int parser_action_row864[] = {
+static int parser_action_row878[] = {
4,
- -1, 3, 863,
- 34, 0, 1028,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 877,
+ 31, 0, 1044,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row865[] = {
+static int parser_action_row879[] = {
1,
- -1, 1, 211
+ -1, 1, 195
};
-static int parser_action_row866[] = {
+static int parser_action_row880[] = {
1,
- -1, 1, 216
+ -1, 1, 200
};
-static int parser_action_row867[] = {
+static int parser_action_row881[] = {
1,
- -1, 1, 213
+ -1, 1, 197
};
-static int parser_action_row868[] = {
+static int parser_action_row882[] = {
1,
- -1, 1, 218
+ -1, 1, 202
};
-static int parser_action_row869[] = {
+static int parser_action_row883[] = {
1,
- -1, 1, 199
+ -1, 1, 183
};
-static int parser_action_row870[] = {
+static int parser_action_row884[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row871[] = {
+static int parser_action_row885[] = {
1,
- -1, 1, 544
+ -1, 1, 539
};
-static int parser_action_row872[] = {
+static int parser_action_row886[] = {
2,
- -1, 3, 871,
- 48, 0, 1031
+ -1, 3, 885,
+ 45, 0, 1047
};
-static int parser_action_row873[] = {
+static int parser_action_row887[] = {
4,
- -1, 3, 872,
- 34, 0, 1032,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 886,
+ 31, 0, 1048,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row874[] = {
+static int parser_action_row888[] = {
3,
- -1, 1, 168,
- 27, 1, 627,
- 52, 1, 726
+ -1, 1, 152,
+ 24, 1, 626,
+ 49, 1, 725
};
-static int parser_action_row875[] = {
+static int parser_action_row889[] = {
3,
- -1, 1, 167,
- 27, 1, 626,
- 52, 1, 725
+ -1, 1, 151,
+ 24, 1, 625,
+ 49, 1, 724
};
-static int parser_action_row876[] = {
+static int parser_action_row890[] = {
2,
- -1, 1, 223,
- 27, 1, 671
+ -1, 1, 207,
+ 24, 1, 670
};
-static int parser_action_row877[] = {
+static int parser_action_row891[] = {
3,
- -1, 1, 207,
- 27, 1, 657,
- 61, 0, 1034
+ -1, 1, 191,
+ 24, 1, 656,
+ 58, 0, 1050
};
-static int parser_action_row878[] = {
+static int parser_action_row892[] = {
2,
- -1, 1, 166,
- 59, 0, 287
+ -1, 1, 150,
+ 56, 0, 292
};
-static int parser_action_row879[] = {
+static int parser_action_row893[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row880[] = {
+static int parser_action_row894[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row881[] = {
+static int parser_action_row895[] = {
2,
- -1, 1, 232,
- 27, 1, 674
+ -1, 1, 216,
+ 24, 1, 673
};
-static int parser_action_row882[] = {
+static int parser_action_row896[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row883[] = {
+static int parser_action_row897[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row884[] = {
+static int parser_action_row898[] = {
2,
- -1, 3, 883,
- 27, 0, 1040
+ -1, 3, 897,
+ 24, 0, 1056
};
-static int parser_action_row885[] = {
+static int parser_action_row899[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 1041,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row886[] = {
- 2,
- -1, 3, 885,
- 59, 0, 1044
-};
-static int parser_action_row887[] = {
- 5,
- -1, 1, 367,
- 12, 0, 1045,
- 49, 0, 499,
- 83, 0, 48,
- 84, 0, 49
-};
-static int parser_action_row888[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row889[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row890[] = {
- 2,
- -1, 1, 195,
- 27, 1, 647
-};
-static int parser_action_row891[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row892[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row893[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row894[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row895[] = {
- 2,
- -1, 1, 201,
- 27, 1, 653
-};
-static int parser_action_row896[] = {
- 1,
- -1, 1, 227
-};
-static int parser_action_row897[] = {
- 3,
- -1, 3, 896,
- 0, 0, 1,
- 1, 0, 2
-};
-static int parser_action_row898[] = {
- 1,
- -1, 1, 225
-};
-static int parser_action_row899[] = {
- 2,
- -1, 1, 203,
- 27, 1, 655
+ 9, 0, 1057,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row900[] = {
- 23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ 2,
+ -1, 3, 899,
+ 56, 0, 1060
};
static int parser_action_row901[] = {
- 2,
- -1, 3, 900,
- 31, 0, 1057
+ 5,
+ -1, 1, 358,
+ 12, 0, 1061,
+ 46, 0, 508,
+ 81, 0, 48,
+ 82, 0, 49
};
static int parser_action_row902[] = {
- 2,
- -1, 3, 901,
- 15, 0, 1058
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row903[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row904[] = {
2,
- -1, 3, 903,
- 57, 0, 1060
+ -1, 1, 179,
+ 24, 1, 646
};
static int parser_action_row905[] = {
- 3,
- -1, 3, 904,
- 50, 0, 338,
- 83, 0, 339
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row906[] = {
- 1,
- -1, 1, 809
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row907[] = {
- 2,
- -1, 1, 562,
- 82, 0, 463
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row908[] = {
- 2,
- -1, 3, 907,
- 55, 0, 1063
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row909[] = {
- 1,
- -1, 1, 563
+ 2,
+ -1, 1, 185,
+ 24, 1, 652
};
static int parser_action_row910[] = {
1,
- -1, 1, 336
+ -1, 1, 211
};
static int parser_action_row911[] = {
- 24,
- -1, 1, 733,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 3, 910,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row912[] = {
- 2,
- -1, 1, 738,
- 52, 0, 171
+ 1,
+ -1, 1, 209
};
static int parser_action_row913[] = {
2,
- -1, 1, 735,
- 52, 0, 171
+ -1, 1, 187,
+ 24, 1, 654
};
static int parser_action_row914[] = {
- 1,
- -1, 1, 737
+ 23,
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
static int parser_action_row915[] = {
2,
-1, 3, 914,
- 11, 0, 1067
+ 28, 0, 1073
};
static int parser_action_row916[] = {
- 4,
- -1, 1, 319,
- 56, 0, 470,
- 60, 0, 189,
- 82, 0, 180
+ 2,
+ -1, 3, 915,
+ 15, 0, 1074
};
static int parser_action_row917[] = {
- 1,
- -1, 1, 340
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row918[] = {
- 1,
- -1, 1, 731
+ 2,
+ -1, 3, 917,
+ 54, 0, 1076
};
static int parser_action_row919[] = {
- 1,
- -1, 1, 732
+ 3,
+ -1, 3, 918,
+ 47, 0, 344,
+ 81, 0, 345
};
static int parser_action_row920[] = {
1,
- -1, 1, 740
+ -1, 1, 809
};
static int parser_action_row921[] = {
- 1,
- -1, 1, 742
+ 2,
+ -1, 1, 557,
+ 80, 0, 471
};
static int parser_action_row922[] = {
- 1,
- -1, 1, 741
+ 2,
+ -1, 3, 921,
+ 52, 0, 1079
};
static int parser_action_row923[] = {
1,
- -1, 1, 743
+ -1, 1, 558
};
static int parser_action_row924[] = {
- 1,
- -1, 1, 744
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row925[] = {
1,
- -1, 1, 341
+ -1, 1, 312
};
static int parser_action_row926[] = {
- 4,
- -1, 1, 276,
- 56, 0, 205,
- 64, 0, 206,
- 66, 0, 1068
+ 1,
+ -1, 1, 314
};
static int parser_action_row927[] = {
1,
- -1, 1, 343
+ -1, 1, 315
};
static int parser_action_row928[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 1,
+ -1, 1, 316
};
static int parser_action_row929[] = {
- 2,
- -1, 1, 337,
- 58, 0, 1070
+ 24,
+ -1, 1, 732,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row930[] = {
- 3,
- -1, 3, 929,
- 44, 0, 324,
- 85, 0, 218
+ 2,
+ -1, 1, 737,
+ 49, 0, 175
};
static int parser_action_row931[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 734,
+ 49, 0, 175
};
static int parser_action_row932[] = {
1,
- -1, 1, 342
+ -1, 1, 736
};
static int parser_action_row933[] = {
2,
-1, 3, 932,
- 57, 0, 1073
+ 11, 0, 1084
};
static int parser_action_row934[] = {
- 2,
- -1, 1, 319,
- 82, 0, 180
+ 4,
+ -1, 1, 306,
+ 53, 0, 478,
+ 57, 0, 193,
+ 80, 0, 184
};
static int parser_action_row935[] = {
1,
- -1, 1, 357
+ -1, 1, 331
};
static int parser_action_row936[] = {
1,
- -1, 1, 443
+ -1, 1, 730
};
static int parser_action_row937[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 1,
+ -1, 1, 731
};
static int parser_action_row938[] = {
- 20,
- -1, 1, 367,
- 12, 0, 802,
- 34, 0, 804,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ 1,
+ -1, 1, 739
};
static int parser_action_row939[] = {
- 3,
- -1, 3, 938,
- 50, 0, 1077,
- 83, 0, 1078
+ 1,
+ -1, 1, 741
};
static int parser_action_row940[] = {
- 19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ 1,
+ -1, 1, 740
};
static int parser_action_row941[] = {
1,
- -1, 1, 445
+ -1, 1, 742
};
static int parser_action_row942[] = {
1,
- -1, 1, 446
+ -1, 1, 743
};
static int parser_action_row943[] = {
1,
- -1, 1, 447
+ -1, 1, 332
};
static int parser_action_row944[] = {
- 1,
- -1, 1, 448
+ 4,
+ -1, 1, 262,
+ 53, 0, 209,
+ 61, 0, 210,
+ 63, 0, 1085
};
static int parser_action_row945[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 1,
+ -1, 1, 334
};
static int parser_action_row946[] = {
3,
- -1, 3, 945,
- 44, 0, 954,
- 85, 0, 1082
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
static int parser_action_row947[] = {
- 3,
- -1, 3, 946,
- 64, 0, 976,
- 66, 0, 1083
+ 2,
+ -1, 1, 328,
+ 55, 0, 1087
};
static int parser_action_row948[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 3,
+ -1, 3, 947,
+ 41, 0, 330,
+ 83, 0, 222
};
static int parser_action_row949[] = {
- 19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ 2,
+ -1, 1, 340,
+ 51, 0, 242
};
static int parser_action_row950[] = {
1,
- -1, 1, 449
+ -1, 1, 333
};
static int parser_action_row951[] = {
- 1,
- -1, 1, 450
+ 2,
+ -1, 3, 950,
+ 54, 0, 1090
};
static int parser_action_row952[] = {
- 1,
- -1, 1, 451
+ 2,
+ -1, 1, 306,
+ 80, 0, 184
};
static int parser_action_row953[] = {
1,
- -1, 1, 453
+ -1, 1, 348
};
static int parser_action_row954[] = {
1,
- -1, 1, 452
+ -1, 1, 435
};
static int parser_action_row955[] = {
- 2,
- -1, 1, 349,
- 54, 0, 238
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row956[] = {
- 1,
- -1, 1, 438
+ 20,
+ -1, 1, 358,
+ 12, 0, 816,
+ 31, 0, 818,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
static int parser_action_row957[] = {
- 1,
- -1, 1, 440
+ 3,
+ -1, 3, 956,
+ 47, 0, 1094,
+ 81, 0, 1095
};
static int parser_action_row958[] = {
- 3,
- -1, 3, 957,
- 56, 0, 1087,
- 57, 0, 1088
+ 19,
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
static int parser_action_row959[] = {
+ 1,
+ -1, 1, 441
+};
+static int parser_action_row960[] = {
+ 1,
+ -1, 1, 442
+};
+static int parser_action_row961[] = {
+ 1,
+ -1, 1, 443
+};
+static int parser_action_row962[] = {
+ 1,
+ -1, 1, 444
+};
+static int parser_action_row963[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row960[] = {
+static int parser_action_row964[] = {
+ 3,
+ -1, 3, 963,
+ 41, 0, 972,
+ 83, 0, 1099
+};
+static int parser_action_row965[] = {
+ 3,
+ -1, 3, 964,
+ 61, 0, 995,
+ 63, 0, 1100
+};
+static int parser_action_row966[] = {
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
+};
+static int parser_action_row967[] = {
+ 19,
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
+};
+static int parser_action_row968[] = {
+ 1,
+ -1, 1, 445
+};
+static int parser_action_row969[] = {
+ 1,
+ -1, 1, 446
+};
+static int parser_action_row970[] = {
+ 1,
+ -1, 1, 447
+};
+static int parser_action_row971[] = {
+ 1,
+ -1, 1, 449
+};
+static int parser_action_row972[] = {
+ 1,
+ -1, 1, 448
+};
+static int parser_action_row973[] = {
+ 2,
+ -1, 1, 340,
+ 51, 0, 242
+};
+static int parser_action_row974[] = {
+ 1,
+ -1, 1, 430
+};
+static int parser_action_row975[] = {
+ 1,
+ -1, 1, 432
+};
+static int parser_action_row976[] = {
+ 3,
+ -1, 3, 975,
+ 53, 0, 1104,
+ 54, 0, 1105
+};
+static int parser_action_row977[] = {
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
+};
+static int parser_action_row978[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 27, 0, 1090
+ 24, 0, 1107
};
-static int parser_action_row961[] = {
+static int parser_action_row979[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row962[] = {
+static int parser_action_row980[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row963[] = {
+static int parser_action_row981[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row964[] = {
+static int parser_action_row982[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row965[] = {
+static int parser_action_row983[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row966[] = {
+static int parser_action_row984[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row967[] = {
+static int parser_action_row985[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row968[] = {
+static int parser_action_row986[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row969[] = {
+static int parser_action_row987[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row970[] = {
+static int parser_action_row988[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row971[] = {
+static int parser_action_row989[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row972[] = {
+static int parser_action_row990[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row973[] = {
+static int parser_action_row991[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row974[] = {
+static int parser_action_row992[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row975[] = {
+static int parser_action_row993[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row976[] = {
+static int parser_action_row994[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row977[] = {
+static int parser_action_row995[] = {
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
+};
+static int parser_action_row996[] = {
1,
- -1, 1, 459
+ -1, 1, 440
};
-static int parser_action_row978[] = {
+static int parser_action_row997[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row979[] = {
+static int parser_action_row998[] = {
2,
- -1, 1, 363,
- 60, 0, 190
+ -1, 1, 354,
+ 57, 0, 194
};
-static int parser_action_row980[] = {
+static int parser_action_row999[] = {
2,
- -1, 3, 979,
- 9, 0, 1109
+ -1, 3, 998,
+ 9, 0, 1127
};
-static int parser_action_row981[] = {
+static int parser_action_row1000[] = {
1,
-1, 1, 816
};
-static int parser_action_row982[] = {
+static int parser_action_row1001[] = {
2,
-1, 1, 42,
13, 0, 27
};
-static int parser_action_row983[] = {
+static int parser_action_row1002[] = {
8,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 4, 1, 325,
- 9, 1, 325,
- 15, 1, 325,
- 31, 1, 325,
- 96, 1, 325
+ 4, 1, 317,
+ 9, 1, 317,
+ 15, 1, 317,
+ 28, 1, 317,
+ 94, 1, 317
};
-static int parser_action_row984[] = {
+static int parser_action_row1003[] = {
2,
- -1, 1, 129,
- 64, 0, 1112
+ -1, 1, 113,
+ 61, 0, 1130
};
-static int parser_action_row985[] = {
+static int parser_action_row1004[] = {
2,
- -1, 1, 318,
- 59, 0, 616
+ -1, 1, 305,
+ 56, 0, 628
};
-static int parser_action_row986[] = {
+static int parser_action_row1005[] = {
1,
- -1, 1, 128
+ -1, 1, 112
};
-static int parser_action_row987[] = {
+static int parser_action_row1006[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 59, 0, 616
+ 56, 0, 628
};
-static int parser_action_row988[] = {
+static int parser_action_row1007[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row989[] = {
+static int parser_action_row1008[] = {
1,
-1, 1, 804
};
-static int parser_action_row990[] = {
+static int parser_action_row1009[] = {
1,
- -1, 1, 124
+ -1, 1, 108
};
-static int parser_action_row991[] = {
+static int parser_action_row1010[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 58, 0, 987
+ 55, 0, 1006
};
-static int parser_action_row992[] = {
+static int parser_action_row1011[] = {
1,
- -1, 1, 139
+ -1, 1, 123
};
-static int parser_action_row993[] = {
+static int parser_action_row1012[] = {
1,
- -1, 1, 140
+ -1, 1, 124
};
-static int parser_action_row994[] = {
+static int parser_action_row1013[] = {
2,
- -1, 1, 133,
- 58, 0, 1119
-};
-static int parser_action_row995[] = {
- 1,
- -1, 1, 137
+ -1, 1, 117,
+ 55, 0, 1137
};
-static int parser_action_row996[] = {
+static int parser_action_row1014[] = {
1,
- -1, 1, 138
-};
-static int parser_action_row997[] = {
- 2,
- -1, 1, 142,
- 66, 0, 1122
+ -1, 1, 121
};
-static int parser_action_row998[] = {
+static int parser_action_row1015[] = {
1,
- -1, 1, 150
+ -1, 1, 122
};
-static int parser_action_row999[] = {
+static int parser_action_row1016[] = {
2,
- -1, 1, 135,
- 4, 0, 720
+ -1, 1, 126,
+ 63, 0, 1140
};
-static int parser_action_row1000[] = {
+static int parser_action_row1017[] = {
2,
- -1, 1, 94,
- 9, 0, 1124
+ -1, 1, 79,
+ 9, 0, 1141
};
-static int parser_action_row1001[] = {
+static int parser_action_row1018[] = {
1,
- -1, 1, 379
+ -1, 1, 370
};
-static int parser_action_row1002[] = {
+static int parser_action_row1019[] = {
1,
- -1, 1, 391
+ -1, 1, 382
};
-static int parser_action_row1003[] = {
+static int parser_action_row1020[] = {
2,
- -1, 1, 378,
- 9, 0, 1000
+ -1, 1, 369,
+ 9, 0, 1017
};
-static int parser_action_row1004[] = {
+static int parser_action_row1021[] = {
1,
- -1, 1, 397
+ -1, 1, 386
};
-static int parser_action_row1005[] = {
+static int parser_action_row1022[] = {
3,
- -1, 1, 166,
- 59, 0, 287,
- 82, 0, 180
+ -1, 1, 150,
+ 56, 0, 292,
+ 80, 0, 184
};
-static int parser_action_row1006[] = {
+static int parser_action_row1023[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 58, 0, 1128
+ 55, 0, 1145
};
-static int parser_action_row1007[] = {
+static int parser_action_row1024[] = {
1,
-1, 1, 56
};
-static int parser_action_row1008[] = {
+static int parser_action_row1025[] = {
4,
-1, 1, 42,
- 9, 0, 1132,
+ 9, 0, 1149,
13, 0, 27,
- 44, 0, 1011
+ 41, 0, 1029
};
-static int parser_action_row1009[] = {
+static int parser_action_row1026[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1010[] = {
+static int parser_action_row1027[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1011[] = {
+static int parser_action_row1028[] = {
+ 1,
+ -1, 1, 791
+};
+static int parser_action_row1029[] = {
1,
-1, 1, 26
};
-static int parser_action_row1012[] = {
+static int parser_action_row1030[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1013[] = {
+static int parser_action_row1031[] = {
1,
- -1, 1, 791
+ -1, 1, 790
};
-static int parser_action_row1014[] = {
+static int parser_action_row1032[] = {
5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
-};
-static int parser_action_row1015[] = {
- 2,
- -1, 1, 42,
- 13, 0, 27
-};
-static int parser_action_row1016[] = {
- 2,
- -1, 1, 42,
- 13, 0, 27
+ -1, 1, 80,
+ 18, 0, 200,
+ 19, 0, 201,
+ 20, 0, 202,
+ 21, 0, 203
};
-static int parser_action_row1017[] = {
+static int parser_action_row1033[] = {
36,
- -1, 1, 367,
- 0, 0, 82,
- 1, 0, 83,
- 12, 0, 106,
+ -1, 1, 358,
+ 0, 0, 83,
+ 1, 0, 84,
+ 12, 0, 107,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 107,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 34, 0, 108,
- 36, 0, 1141,
- 37, 0, 1142,
- 38, 0, 1143,
- 39, 0, 1144,
- 40, 0, 39,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 50, 0, 338,
- 51, 0, 115,
- 53, 0, 1145,
- 54, 0, 1146,
- 68, 0, 117,
- 82, 0, 180,
- 83, 0, 915,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ 16, 0, 29,
+ 22, 0, 108,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 31, 0, 109,
+ 33, 0, 1155,
+ 34, 0, 1156,
+ 35, 0, 1157,
+ 36, 0, 1158,
+ 37, 0, 39,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 47, 0, 344,
+ 48, 0, 116,
+ 50, 0, 1159,
+ 51, 0, 1160,
+ 65, 0, 118,
+ 80, 0, 184,
+ 81, 0, 933,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row1018[] = {
+static int parser_action_row1034[] = {
1,
-1, 1, 799
};
-static int parser_action_row1019[] = {
+static int parser_action_row1035[] = {
4,
-1, 1, 42,
- 9, 0, 1164,
+ 9, 0, 1178,
13, 0, 27,
- 44, 0, 1011
+ 41, 0, 1029
};
-static int parser_action_row1020[] = {
+static int parser_action_row1036[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1021[] = {
+static int parser_action_row1037[] = {
1,
-1, 1, 801
};
-static int parser_action_row1022[] = {
+static int parser_action_row1038[] = {
3,
-1, 1, 42,
- 9, 0, 1166,
+ 9, 0, 1180,
13, 0, 27
};
-static int parser_action_row1023[] = {
+static int parser_action_row1039[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1024[] = {
+static int parser_action_row1040[] = {
1,
-1, 1, 819
};
-static int parser_action_row1025[] = {
- 5,
+static int parser_action_row1041[] = {
+ 6,
-1, 1, 42,
- 9, 0, 1170,
+ 6, 0, 1027,
+ 9, 0, 1184,
13, 0, 27,
- 44, 0, 1011,
- 84, 0, 1012
+ 41, 0, 1029,
+ 82, 0, 1030
};
-static int parser_action_row1026[] = {
+static int parser_action_row1042[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1027[] = {
+static int parser_action_row1043[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1028[] = {
+static int parser_action_row1044[] = {
1,
- -1, 1, 305
+ -1, 1, 278
};
-static int parser_action_row1029[] = {
+static int parser_action_row1045[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1030[] = {
+static int parser_action_row1046[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1031[] = {
+static int parser_action_row1047[] = {
2,
- -1, 3, 1030,
- 27, 0, 1176
+ -1, 3, 1046,
+ 24, 0, 1190
};
-static int parser_action_row1032[] = {
+static int parser_action_row1048[] = {
1,
- -1, 1, 557
+ -1, 1, 542
};
-static int parser_action_row1033[] = {
+static int parser_action_row1049[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1034[] = {
+static int parser_action_row1050[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1035[] = {
+static int parser_action_row1051[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1036[] = {
+static int parser_action_row1052[] = {
3,
- -1, 1, 208,
- 27, 1, 658,
- 61, 0, 1180
+ -1, 1, 192,
+ 24, 1, 657,
+ 58, 0, 1194
};
-static int parser_action_row1037[] = {
+static int parser_action_row1053[] = {
2,
- -1, 3, 1036,
- 26, 0, 1181
+ -1, 3, 1052,
+ 23, 0, 1195
};
-static int parser_action_row1038[] = {
+static int parser_action_row1054[] = {
2,
- -1, 3, 1037,
- 15, 0, 1182
+ -1, 3, 1053,
+ 15, 0, 1196
};
-static int parser_action_row1039[] = {
+static int parser_action_row1055[] = {
2,
- -1, 3, 1038,
- 84, 0, 294
+ -1, 3, 1054,
+ 82, 0, 299
};
-static int parser_action_row1040[] = {
+static int parser_action_row1056[] = {
3,
- -1, 3, 1039,
- 31, 0, 1184,
- 58, 0, 556
+ -1, 3, 1055,
+ 28, 0, 1198,
+ 55, 0, 566
};
-static int parser_action_row1041[] = {
+static int parser_action_row1057[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 1041,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 9, 0, 1057,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1042[] = {
+static int parser_action_row1058[] = {
2,
- -1, 1, 169,
- 27, 1, 628
+ -1, 1, 153,
+ 24, 1, 627
};
-static int parser_action_row1043[] = {
+static int parser_action_row1059[] = {
30,
- -1, 1, 367,
- 9, 0, 1186,
+ -1, 1, 358,
+ 9, 0, 1200,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1044[] = {
+static int parser_action_row1060[] = {
1,
- -1, 1, 682
+ -1, 1, 681
};
-static int parser_action_row1045[] = {
+static int parser_action_row1061[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1046[] = {
+static int parser_action_row1062[] = {
26,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 56, 1, 349,
- 64, 1, 349,
- 66, 1, 349,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 53, 1, 340,
+ 61, 1, 340,
+ 63, 1, 340,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row1047[] = {
+static int parser_action_row1063[] = {
2,
- -1, 3, 1046,
- 85, 0, 1190
+ -1, 3, 1062,
+ 83, 0, 1204
};
-static int parser_action_row1048[] = {
+static int parser_action_row1064[] = {
29,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 116,
- 56, 1, 349,
- 61, 1, 349,
- 62, 1, 349,
- 63, 1, 349,
- 64, 1, 349,
- 66, 1, 349,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 117,
+ 53, 1, 340,
+ 58, 1, 340,
+ 59, 1, 340,
+ 60, 1, 340,
+ 61, 1, 340,
+ 63, 1, 340,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row1049[] = {
+static int parser_action_row1065[] = {
3,
- -1, 1, 364,
- 12, 0, 1193,
- 84, 0, 222
+ -1, 1, 355,
+ 12, 0, 1207,
+ 82, 0, 226
};
-static int parser_action_row1050[] = {
+static int parser_action_row1066[] = {
4,
- -1, 1, 366,
- 12, 0, 1194,
- 83, 0, 48,
- 84, 0, 224
+ -1, 1, 357,
+ 12, 0, 1208,
+ 81, 0, 48,
+ 82, 0, 228
};
-static int parser_action_row1051[] = {
+static int parser_action_row1067[] = {
1,
- -1, 1, 665
+ -1, 1, 664
};
-static int parser_action_row1052[] = {
+static int parser_action_row1068[] = {
1,
- -1, 1, 670
+ -1, 1, 669
};
-static int parser_action_row1053[] = {
+static int parser_action_row1069[] = {
1,
- -1, 1, 662
+ -1, 1, 661
};
-static int parser_action_row1054[] = {
+static int parser_action_row1070[] = {
1,
- -1, 1, 667
+ -1, 1, 666
};
-static int parser_action_row1055[] = {
+static int parser_action_row1071[] = {
1,
- -1, 1, 664
+ -1, 1, 663
};
-static int parser_action_row1056[] = {
+static int parser_action_row1072[] = {
1,
- -1, 1, 669
+ -1, 1, 668
};
-static int parser_action_row1057[] = {
+static int parser_action_row1073[] = {
2,
- -1, 1, 202,
- 27, 1, 654
+ -1, 1, 186,
+ 24, 1, 653
};
-static int parser_action_row1058[] = {
+static int parser_action_row1074[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1059[] = {
+static int parser_action_row1075[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 139,
+ 9, 0, 142,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1060[] = {
+static int parser_action_row1076[] = {
2,
- -1, 3, 1059,
- 27, 0, 1199
+ -1, 3, 1075,
+ 24, 0, 1213
};
-static int parser_action_row1061[] = {
+static int parser_action_row1077[] = {
2,
- -1, 1, 562,
- 82, 0, 463
+ -1, 1, 557,
+ 80, 0, 471
};
-static int parser_action_row1062[] = {
+static int parser_action_row1078[] = {
1,
- -1, 1, 163
+ -1, 1, 147
};
-static int parser_action_row1063[] = {
+static int parser_action_row1079[] = {
1,
- -1, 1, 462
+ -1, 1, 454
};
-static int parser_action_row1064[] = {
+static int parser_action_row1080[] = {
1,
- -1, 1, 560
+ -1, 1, 555
};
-static int parser_action_row1065[] = {
+static int parser_action_row1081[] = {
+ 35,
+ -1, 1, 358,
+ 12, 0, 155,
+ 15, 0, 28,
+ 16, 0, 29,
+ 22, 0, 156,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 31, 0, 157,
+ 33, 0, 928,
+ 34, 0, 929,
+ 35, 0, 930,
+ 36, 0, 931,
+ 37, 0, 39,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 47, 0, 344,
+ 48, 0, 160,
+ 50, 0, 932,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 80, 0, 184,
+ 81, 0, 933,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
+};
+static int parser_action_row1082[] = {
1,
- -1, 1, 734
+ -1, 1, 733
};
-static int parser_action_row1066[] = {
+static int parser_action_row1083[] = {
1,
- -1, 1, 739
+ -1, 1, 738
};
-static int parser_action_row1067[] = {
+static int parser_action_row1084[] = {
1,
- -1, 1, 736
+ -1, 1, 735
};
-static int parser_action_row1068[] = {
+static int parser_action_row1085[] = {
3,
- -1, 3, 1067,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 1084,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row1069[] = {
+static int parser_action_row1086[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1070[] = {
+static int parser_action_row1087[] = {
2,
- -1, 3, 1069,
- 55, 0, 1203
+ -1, 3, 1086,
+ 52, 0, 1218
};
-static int parser_action_row1071[] = {
+static int parser_action_row1088[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1072[] = {
+static int parser_action_row1089[] = {
1,
-1, 1, 820
};
-static int parser_action_row1073[] = {
+static int parser_action_row1090[] = {
2,
- -1, 1, 338,
- 58, 0, 1070
+ -1, 1, 329,
+ 55, 0, 1087
};
-static int parser_action_row1074[] = {
+static int parser_action_row1091[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row1075[] = {
+static int parser_action_row1092[] = {
1,
- -1, 1, 159
+ -1, 1, 143
};
-static int parser_action_row1076[] = {
+static int parser_action_row1093[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1077[] = {
+static int parser_action_row1094[] = {
1,
- -1, 1, 411
+ -1, 1, 400
};
-static int parser_action_row1078[] = {
+static int parser_action_row1095[] = {
2,
- -1, 3, 1077,
- 83, 0, 1208
+ -1, 3, 1094,
+ 81, 0, 1223
};
-static int parser_action_row1079[] = {
+static int parser_action_row1096[] = {
2,
- -1, 1, 562,
- 82, 0, 463
+ -1, 1, 557,
+ 80, 0, 471
};
-static int parser_action_row1080[] = {
+static int parser_action_row1097[] = {
3,
- -1, 1, 349,
- 54, 0, 238,
- 66, 0, 1210
+ -1, 1, 340,
+ 51, 0, 242,
+ 63, 0, 1225
};
-static int parser_action_row1081[] = {
+static int parser_action_row1098[] = {
1,
- -1, 1, 432
+ -1, 1, 423
};
-static int parser_action_row1082[] = {
+static int parser_action_row1099[] = {
3,
- -1, 3, 1081,
- 50, 0, 1077,
- 83, 0, 1078
+ -1, 3, 1098,
+ 47, 0, 1094,
+ 81, 0, 1095
};
-static int parser_action_row1083[] = {
+static int parser_action_row1100[] = {
3,
- -1, 1, 436,
- 64, 1, 438,
- 66, 1, 438
+ -1, 1, 427,
+ 61, 1, 430,
+ 63, 1, 430
};
-static int parser_action_row1084[] = {
+static int parser_action_row1101[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1085[] = {
+static int parser_action_row1102[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1086[] = {
+static int parser_action_row1103[] = {
1,
- -1, 1, 431
+ -1, 1, 422
};
-static int parser_action_row1087[] = {
+static int parser_action_row1104[] = {
1,
- -1, 1, 441
+ -1, 1, 433
};
-static int parser_action_row1088[] = {
+static int parser_action_row1105[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row1089[] = {
+static int parser_action_row1106[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row1090[] = {
+static int parser_action_row1107[] = {
20,
- -1, 1, 367,
- 12, 0, 802,
- 34, 0, 804,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 31, 0, 818,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1091[] = {
+static int parser_action_row1108[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1092[] = {
+static int parser_action_row1109[] = {
20,
- -1, 1, 367,
- 12, 0, 802,
- 34, 0, 804,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 31, 0, 818,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1093[] = {
+static int parser_action_row1110[] = {
20,
- -1, 1, 367,
- 12, 0, 802,
- 34, 0, 804,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 31, 0, 818,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1094[] = {
+static int parser_action_row1111[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1095[] = {
+static int parser_action_row1112[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1096[] = {
+static int parser_action_row1113[] = {
3,
- -1, 3, 1095,
- 50, 0, 1223,
- 83, 0, 1224
+ -1, 3, 1112,
+ 47, 0, 1238,
+ 81, 0, 1239
};
-static int parser_action_row1097[] = {
+static int parser_action_row1114[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1098[] = {
+static int parser_action_row1115[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1099[] = {
+static int parser_action_row1116[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1100[] = {
+static int parser_action_row1117[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1101[] = {
+static int parser_action_row1118[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1102[] = {
+static int parser_action_row1119[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1103[] = {
+static int parser_action_row1120[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1104[] = {
+static int parser_action_row1121[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1105[] = {
+static int parser_action_row1122[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1106[] = {
+static int parser_action_row1123[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1107[] = {
+static int parser_action_row1124[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1108[] = {
+static int parser_action_row1125[] = {
19,
- -1, 1, 367,
- 12, 0, 802,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1109[] = {
+static int parser_action_row1126[] = {
+ 19,
+ -1, 1, 358,
+ 12, 0, 816,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
+};
+static int parser_action_row1127[] = {
5,
- -1, 1, 367,
- 12, 0, 1238,
- 49, 0, 1239,
- 83, 0, 48,
- 84, 0, 49
+ -1, 1, 358,
+ 12, 0, 1254,
+ 46, 0, 1255,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row1110[] = {
+static int parser_action_row1128[] = {
1,
- -1, 1, 91
+ -1, 1, 76
};
-static int parser_action_row1111[] = {
+static int parser_action_row1129[] = {
5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
+ -1, 1, 80,
+ 18, 0, 200,
+ 19, 0, 201,
+ 20, 0, 202,
+ 21, 0, 203
};
-static int parser_action_row1112[] = {
+static int parser_action_row1130[] = {
1,
-1, 1, 817
};
-static int parser_action_row1113[] = {
+static int parser_action_row1131[] = {
1,
- -1, 1, 131
+ -1, 1, 115
};
-static int parser_action_row1114[] = {
+static int parser_action_row1132[] = {
2,
- -1, 1, 130,
- 64, 0, 1243
+ -1, 1, 114,
+ 61, 0, 1259
};
-static int parser_action_row1115[] = {
+static int parser_action_row1133[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1116[] = {
+static int parser_action_row1134[] = {
1,
- -1, 1, 121
+ -1, 1, 105
};
-static int parser_action_row1117[] = {
+static int parser_action_row1135[] = {
2,
- -1, 3, 1116,
- 84, 0, 838
+ -1, 3, 1134,
+ 82, 0, 854
};
-static int parser_action_row1118[] = {
+static int parser_action_row1136[] = {
1,
-1, 1, 805
};
-static int parser_action_row1119[] = {
+static int parser_action_row1137[] = {
1,
- -1, 1, 125
+ -1, 1, 109
};
-static int parser_action_row1120[] = {
+static int parser_action_row1138[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1121[] = {
+static int parser_action_row1139[] = {
1,
-1, 1, 806
};
-static int parser_action_row1122[] = {
+static int parser_action_row1140[] = {
2,
- -1, 1, 134,
- 58, 0, 1119
-};
-static int parser_action_row1123[] = {
- 18,
- -1, 3, 1122,
- 49, 0, 1248,
- 56, 0, 479,
- 67, 0, 480,
- 68, 0, 481,
- 69, 0, 482,
- 70, 0, 483,
- 71, 0, 484,
- 72, 0, 485,
- 73, 0, 486,
- 74, 0, 487,
- 75, 0, 488,
- 76, 0, 489,
- 77, 0, 490,
- 78, 0, 491,
- 79, 0, 492,
- 80, 0, 493,
- 84, 0, 494
+ -1, 1, 118,
+ 55, 0, 1137
};
-static int parser_action_row1124[] = {
- 3,
- -1, 1, 155,
- 31, 0, 34,
- 96, 0, 56
+static int parser_action_row1141[] = {
+ 19,
+ -1, 3, 1140,
+ 46, 0, 1264,
+ 53, 0, 487,
+ 64, 0, 488,
+ 65, 0, 489,
+ 66, 0, 490,
+ 67, 0, 491,
+ 68, 0, 492,
+ 69, 0, 493,
+ 70, 0, 494,
+ 71, 0, 495,
+ 72, 0, 496,
+ 73, 0, 497,
+ 74, 0, 498,
+ 75, 0, 499,
+ 76, 0, 500,
+ 77, 0, 501,
+ 78, 0, 502,
+ 82, 0, 503
};
-static int parser_action_row1125[] = {
+static int parser_action_row1142[] = {
1,
- -1, 1, 399
+ -1, 1, 388
};
-static int parser_action_row1126[] = {
+static int parser_action_row1143[] = {
1,
- -1, 1, 392
+ -1, 1, 383
};
-static int parser_action_row1127[] = {
+static int parser_action_row1144[] = {
1,
-1, 1, 53
};
-static int parser_action_row1128[] = {
+static int parser_action_row1145[] = {
2,
- -1, 1, 166,
- 59, 0, 287
+ -1, 1, 150,
+ 56, 0, 292
};
-static int parser_action_row1129[] = {
+static int parser_action_row1146[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1130[] = {
+static int parser_action_row1147[] = {
1,
-1, 1, 802
};
-static int parser_action_row1131[] = {
+static int parser_action_row1148[] = {
2,
- -1, 3, 1130,
- 57, 0, 1254
+ -1, 3, 1147,
+ 54, 0, 1268
};
-static int parser_action_row1132[] = {
+static int parser_action_row1149[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 58, 0, 1128
+ 55, 0, 1145
};
-static int parser_action_row1133[] = {
+static int parser_action_row1150[] = {
1,
-1, 1, 28
};
-static int parser_action_row1134[] = {
+static int parser_action_row1151[] = {
4,
-1, 1, 42,
- 9, 0, 1257,
+ 9, 0, 1271,
13, 0, 27,
- 44, 0, 1011
+ 41, 0, 1029
};
-static int parser_action_row1135[] = {
+static int parser_action_row1152[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1136[] = {
+static int parser_action_row1153[] = {
3,
-1, 1, 42,
- 9, 0, 1259,
+ 9, 0, 1273,
13, 0, 27
};
-static int parser_action_row1137[] = {
+static int parser_action_row1154[] = {
3,
- -1, 3, 1136,
- 50, 0, 338,
- 83, 0, 339
-};
-static int parser_action_row1138[] = {
- 8,
- -1, 3, 1137,
- 10, 0, 1261,
- 11, 0, 1262,
- 12, 0, 1263,
- 16, 0, 1264,
- 17, 0, 1265,
- 18, 0, 1266,
- 41, 0, 1267
+ -1, 3, 1153,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row1139[] = {
- 5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
-};
-static int parser_action_row1140[] = {
- 2,
- -1, 1, 42,
- 13, 0, 27
-};
-static int parser_action_row1141[] = {
- 5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
+static int parser_action_row1155[] = {
+ 6,
+ -1, 3, 1154,
+ 10, 0, 1275,
+ 11, 0, 1276,
+ 12, 0, 1277,
+ 16, 0, 1278,
+ 38, 0, 1279
};
-static int parser_action_row1142[] = {
+static int parser_action_row1156[] = {
24,
- -1, 1, 748,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 44, 1, 367,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 747,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 41, 1, 358,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1143[] = {
+static int parser_action_row1157[] = {
2,
- -1, 1, 753,
- 52, 0, 171
+ -1, 1, 752,
+ 49, 0, 175
};
-static int parser_action_row1144[] = {
+static int parser_action_row1158[] = {
2,
- -1, 1, 750,
- 52, 0, 171
+ -1, 1, 749,
+ 49, 0, 175
};
-static int parser_action_row1145[] = {
+static int parser_action_row1159[] = {
1,
- -1, 1, 752
+ -1, 1, 751
};
-static int parser_action_row1146[] = {
+static int parser_action_row1160[] = {
2,
- -1, 3, 1145,
- 11, 0, 1274
+ -1, 3, 1159,
+ 11, 0, 1283
};
-static int parser_action_row1147[] = {
+static int parser_action_row1161[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1148[] = {
+static int parser_action_row1162[] = {
1,
- -1, 1, 566
+ -1, 1, 562
};
-static int parser_action_row1149[] = {
+static int parser_action_row1163[] = {
1,
- -1, 1, 746
+ -1, 1, 745
};
-static int parser_action_row1150[] = {
+static int parser_action_row1164[] = {
1,
- -1, 1, 755
+ -1, 1, 754
};
-static int parser_action_row1151[] = {
+static int parser_action_row1165[] = {
1,
- -1, 1, 757
+ -1, 1, 756
};
-static int parser_action_row1152[] = {
+static int parser_action_row1166[] = {
1,
- -1, 1, 756
+ -1, 1, 755
};
-static int parser_action_row1153[] = {
+static int parser_action_row1167[] = {
1,
- -1, 1, 758
+ -1, 1, 757
};
-static int parser_action_row1154[] = {
+static int parser_action_row1168[] = {
1,
- -1, 1, 759
+ -1, 1, 758
};
-static int parser_action_row1155[] = {
+static int parser_action_row1169[] = {
3,
- -1, 3, 1154,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 1168,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row1156[] = {
+static int parser_action_row1170[] = {
3,
- -1, 3, 1155,
- 44, 0, 258,
- 85, 0, 1277
+ -1, 3, 1169,
+ 41, 0, 262,
+ 83, 0, 1286
};
-static int parser_action_row1157[] = {
+static int parser_action_row1171[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row1158[] = {
+static int parser_action_row1172[] = {
1,
- -1, 1, 331
+ -1, 1, 323
};
-static int parser_action_row1159[] = {
+static int parser_action_row1173[] = {
1,
- -1, 1, 747
+ -1, 1, 746
};
-static int parser_action_row1160[] = {
+static int parser_action_row1174[] = {
1,
- -1, 1, 567
+ -1, 1, 563
};
-static int parser_action_row1161[] = {
+static int parser_action_row1175[] = {
4,
- -1, 1, 532,
- 56, 0, 205,
- 64, 0, 279,
- 66, 0, 1279
+ -1, 1, 526,
+ 53, 0, 209,
+ 61, 0, 284,
+ 63, 0, 1288
};
-static int parser_action_row1162[] = {
+static int parser_action_row1176[] = {
3,
- -1, 3, 1161,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 1175,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row1163[] = {
+static int parser_action_row1177[] = {
2,
- -1, 1, 564,
- 58, 0, 1070
+ -1, 1, 560,
+ 55, 0, 1087
};
-static int parser_action_row1164[] = {
+static int parser_action_row1178[] = {
1,
- -1, 1, 568
+ -1, 1, 564
};
-static int parser_action_row1165[] = {
+static int parser_action_row1179[] = {
1,
-1, 1, 30
};
-static int parser_action_row1166[] = {
+static int parser_action_row1180[] = {
3,
-1, 1, 42,
- 9, 0, 1283,
+ 9, 0, 1292,
13, 0, 27
};
-static int parser_action_row1167[] = {
+static int parser_action_row1181[] = {
1,
-1, 1, 34
};
-static int parser_action_row1168[] = {
+static int parser_action_row1182[] = {
4,
-1, 1, 42,
- 9, 0, 1284,
+ 9, 0, 1293,
13, 0, 27,
- 44, 0, 1011
+ 41, 0, 1029
};
-static int parser_action_row1169[] = {
+static int parser_action_row1183[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1170[] = {
+static int parser_action_row1184[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1171[] = {
+static int parser_action_row1185[] = {
1,
-1, 1, 27
};
-static int parser_action_row1172[] = {
+static int parser_action_row1186[] = {
4,
-1, 1, 42,
- 9, 0, 1288,
+ 9, 0, 1297,
13, 0, 27,
- 44, 0, 1011
+ 41, 0, 1029
};
-static int parser_action_row1173[] = {
+static int parser_action_row1187[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1174[] = {
+static int parser_action_row1188[] = {
3,
-1, 1, 42,
- 9, 0, 1290,
+ 9, 0, 1299,
13, 0, 27
};
-static int parser_action_row1175[] = {
+static int parser_action_row1189[] = {
2,
- -1, 3, 1174,
- 48, 0, 1291
+ -1, 3, 1188,
+ 45, 0, 1300
};
-static int parser_action_row1176[] = {
+static int parser_action_row1190[] = {
2,
- -1, 3, 1175,
- 55, 0, 1292
+ -1, 3, 1189,
+ 52, 0, 1301
};
-static int parser_action_row1177[] = {
+static int parser_action_row1191[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1178[] = {
+static int parser_action_row1192[] = {
2,
- -1, 3, 1177,
- 48, 0, 1294
+ -1, 3, 1191,
+ 45, 0, 1303
};
-static int parser_action_row1179[] = {
+static int parser_action_row1193[] = {
2,
- -1, 3, 1178,
- 55, 0, 1295
+ -1, 3, 1192,
+ 52, 0, 1304
};
-static int parser_action_row1180[] = {
+static int parser_action_row1194[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1181[] = {
+static int parser_action_row1195[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1182[] = {
+static int parser_action_row1196[] = {
33,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 649,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 27, 0, 654,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 9, 0, 661,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 24, 0, 666,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1183[] = {
+static int parser_action_row1197[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 749,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 9, 0, 762,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1184[] = {
+static int parser_action_row1198[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1185[] = {
+static int parser_action_row1199[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1186[] = {
+static int parser_action_row1200[] = {
1,
- -1, 1, 683
+ -1, 1, 682
};
-static int parser_action_row1187[] = {
+static int parser_action_row1201[] = {
2,
- -1, 1, 168,
- 27, 1, 627
+ -1, 1, 152,
+ 24, 1, 626
};
-static int parser_action_row1188[] = {
+static int parser_action_row1202[] = {
2,
- -1, 1, 167,
- 27, 1, 626
+ -1, 1, 151,
+ 24, 1, 625
};
-static int parser_action_row1189[] = {
+static int parser_action_row1203[] = {
1,
- -1, 1, 656
+ -1, 1, 655
};
-static int parser_action_row1190[] = {
+static int parser_action_row1204[] = {
2,
- -1, 1, 196,
- 27, 1, 648
+ -1, 1, 180,
+ 24, 1, 647
};
-static int parser_action_row1191[] = {
+static int parser_action_row1205[] = {
4,
- -1, 1, 280,
- 61, 0, 1303,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 267,
+ 58, 0, 1312,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row1192[] = {
+static int parser_action_row1206[] = {
4,
- -1, 1, 282,
- 61, 0, 1305,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 269,
+ 58, 0, 1314,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row1193[] = {
+static int parser_action_row1207[] = {
2,
- -1, 1, 193,
- 27, 1, 645
+ -1, 1, 177,
+ 24, 1, 644
};
-static int parser_action_row1194[] = {
+static int parser_action_row1208[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row1195[] = {
+static int parser_action_row1209[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row1196[] = {
+static int parser_action_row1210[] = {
3,
- -1, 1, 365,
- 12, 0, 1309,
- 84, 0, 383
+ -1, 1, 356,
+ 12, 0, 1318,
+ 82, 0, 389
};
-static int parser_action_row1197[] = {
+static int parser_action_row1211[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1198[] = {
+static int parser_action_row1212[] = {
1,
- -1, 1, 239
+ -1, 1, 223
};
-static int parser_action_row1199[] = {
+static int parser_action_row1213[] = {
2,
- -1, 3, 1198,
- 52, 0, 171
+ -1, 3, 1212,
+ 49, 0, 175
};
-static int parser_action_row1200[] = {
+static int parser_action_row1214[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1201[] = {
+static int parser_action_row1215[] = {
1,
- -1, 1, 463
+ -1, 1, 455
};
-static int parser_action_row1202[] = {
+static int parser_action_row1216[] = {
+ 3,
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
+};
+static int parser_action_row1217[] = {
2,
- -1, 3, 1201,
- 59, 0, 1313
+ -1, 3, 1216,
+ 56, 0, 1323
};
-static int parser_action_row1203[] = {
+static int parser_action_row1218[] = {
5,
- -1, 1, 367,
- 12, 0, 579,
- 49, 0, 499,
- 83, 0, 48,
- 84, 0, 49
+ -1, 1, 358,
+ 12, 0, 590,
+ 46, 0, 508,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row1204[] = {
+static int parser_action_row1219[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row1205[] = {
+static int parser_action_row1220[] = {
35,
- -1, 1, 367,
- 12, 0, 152,
+ -1, 1, 358,
+ 12, 0, 155,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 153,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 34, 0, 154,
- 36, 0, 910,
- 37, 0, 911,
- 38, 0, 912,
- 39, 0, 913,
- 40, 0, 39,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 50, 0, 338,
- 51, 0, 157,
- 53, 0, 914,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 82, 0, 180,
- 83, 0, 915,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 156,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 31, 0, 157,
+ 33, 0, 928,
+ 34, 0, 929,
+ 35, 0, 930,
+ 36, 0, 931,
+ 37, 0, 39,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 47, 0, 344,
+ 48, 0, 160,
+ 50, 0, 932,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 80, 0, 184,
+ 81, 0, 933,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1206[] = {
+static int parser_action_row1221[] = {
1,
-1, 1, 821
};
-static int parser_action_row1207[] = {
+static int parser_action_row1222[] = {
1,
- -1, 1, 160
+ -1, 1, 144
};
-static int parser_action_row1208[] = {
+static int parser_action_row1223[] = {
2,
- -1, 3, 1207,
- 26, 0, 1317
+ -1, 3, 1222,
+ 23, 0, 1327
};
-static int parser_action_row1209[] = {
+static int parser_action_row1224[] = {
2,
- -1, 1, 562,
- 82, 0, 463
+ -1, 1, 557,
+ 80, 0, 471
};
-static int parser_action_row1210[] = {
+static int parser_action_row1225[] = {
1,
- -1, 1, 569
+ -1, 1, 565
};
-static int parser_action_row1211[] = {
+static int parser_action_row1226[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1212[] = {
+static int parser_action_row1227[] = {
1,
- -1, 1, 434
+ -1, 1, 425
};
-static int parser_action_row1213[] = {
+static int parser_action_row1228[] = {
2,
- -1, 3, 1212,
- 66, 0, 1210
+ -1, 3, 1227,
+ 63, 0, 1225
};
-static int parser_action_row1214[] = {
+static int parser_action_row1229[] = {
5,
- -1, 1, 367,
- 12, 0, 1238,
- 49, 0, 1239,
- 83, 0, 48,
- 84, 0, 49
+ -1, 1, 358,
+ 12, 0, 1254,
+ 46, 0, 1255,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row1215[] = {
+static int parser_action_row1230[] = {
2,
- -1, 3, 1214,
- 55, 0, 1321
+ -1, 3, 1229,
+ 52, 0, 1331
};
-static int parser_action_row1216[] = {
+static int parser_action_row1231[] = {
1,
- -1, 1, 290
+ -1, 1, 292
};
-static int parser_action_row1217[] = {
+static int parser_action_row1232[] = {
1,
- -1, 1, 289
+ -1, 1, 291
};
-static int parser_action_row1218[] = {
+static int parser_action_row1233[] = {
1,
- -1, 1, 407
+ -1, 1, 396
};
-static int parser_action_row1219[] = {
+static int parser_action_row1234[] = {
20,
- -1, 1, 367,
- 12, 0, 802,
- 34, 0, 804,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
+ -1, 1, 358,
+ 12, 0, 816,
+ 31, 0, 818,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1220[] = {
+static int parser_action_row1235[] = {
1,
- -1, 1, 406
+ -1, 1, 395
};
-static int parser_action_row1221[] = {
+static int parser_action_row1236[] = {
1,
- -1, 1, 409
+ -1, 1, 398
};
-static int parser_action_row1222[] = {
+static int parser_action_row1237[] = {
3,
- -1, 1, 417,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 406,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1223[] = {
+static int parser_action_row1238[] = {
3,
- -1, 1, 420,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 409,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1224[] = {
+static int parser_action_row1239[] = {
2,
- -1, 3, 1223,
- 83, 0, 1323
+ -1, 3, 1238,
+ 81, 0, 1333
};
-static int parser_action_row1225[] = {
+static int parser_action_row1240[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row1226[] = {
+static int parser_action_row1241[] = {
1,
- -1, 1, 422
+ -1, 1, 411
};
-static int parser_action_row1227[] = {
+static int parser_action_row1242[] = {
4,
- -1, 1, 424,
- 69, 0, 973,
- 70, 0, 974,
- 71, 0, 975
+ -1, 1, 413,
+ 66, 0, 991,
+ 68, 0, 992,
+ 69, 0, 993
};
-static int parser_action_row1228[] = {
+static int parser_action_row1243[] = {
4,
- -1, 1, 425,
- 69, 0, 973,
- 70, 0, 974,
- 71, 0, 975
+ -1, 1, 414,
+ 66, 0, 991,
+ 68, 0, 992,
+ 69, 0, 993
};
-static int parser_action_row1229[] = {
+static int parser_action_row1244[] = {
3,
- -1, 1, 413,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 402,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1230[] = {
+static int parser_action_row1245[] = {
3,
- -1, 1, 414,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 403,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1231[] = {
+static int parser_action_row1246[] = {
3,
- -1, 1, 415,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 404,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1232[] = {
+static int parser_action_row1247[] = {
3,
- -1, 1, 416,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 405,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1233[] = {
+static int parser_action_row1248[] = {
3,
- -1, 1, 418,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 407,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1234[] = {
+static int parser_action_row1249[] = {
3,
- -1, 1, 419,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 408,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1235[] = {
+static int parser_action_row1250[] = {
3,
- -1, 1, 421,
- 67, 0, 964,
- 68, 0, 965
+ -1, 1, 410,
+ 64, 0, 982,
+ 65, 0, 983
};
-static int parser_action_row1236[] = {
+static int parser_action_row1251[] = {
1,
- -1, 1, 427
+ -1, 1, 416
};
-static int parser_action_row1237[] = {
+static int parser_action_row1252[] = {
1,
- -1, 1, 428
+ -1, 1, 417
};
-static int parser_action_row1238[] = {
+static int parser_action_row1253[] = {
1,
- -1, 1, 429
+ -1, 1, 418
};
-static int parser_action_row1239[] = {
+static int parser_action_row1254[] = {
+ 1,
+ -1, 1, 420
+};
+static int parser_action_row1255[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row1240[] = {
+static int parser_action_row1256[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1241[] = {
+static int parser_action_row1257[] = {
2,
- -1, 3, 1240,
- 85, 0, 1327
+ -1, 3, 1256,
+ 83, 0, 1337
};
-static int parser_action_row1242[] = {
+static int parser_action_row1258[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row1243[] = {
+static int parser_action_row1259[] = {
4,
- -1, 3, 1242,
- 16, 0, 594,
- 17, 0, 595,
- 84, 0, 596
+ -1, 3, 1258,
+ 6, 0, 606,
+ 17, 0, 607,
+ 82, 0, 608
};
-static int parser_action_row1244[] = {
+static int parser_action_row1260[] = {
1,
- -1, 1, 132
+ -1, 1, 116
};
-static int parser_action_row1245[] = {
+static int parser_action_row1261[] = {
1,
- -1, 1, 120
+ -1, 1, 104
};
-static int parser_action_row1246[] = {
+static int parser_action_row1262[] = {
1,
- -1, 1, 127
+ -1, 1, 111
};
-static int parser_action_row1247[] = {
- 20,
- -1, 3, 1246,
- 44, 0, 991,
- 50, 0, 338,
- 56, 0, 479,
- 67, 0, 480,
- 68, 0, 481,
- 69, 0, 482,
- 70, 0, 483,
- 71, 0, 484,
- 72, 0, 485,
- 73, 0, 486,
- 74, 0, 487,
- 75, 0, 488,
- 76, 0, 489,
- 77, 0, 490,
- 78, 0, 491,
- 79, 0, 492,
- 80, 0, 493,
- 83, 0, 339,
- 84, 0, 494
+static int parser_action_row1263[] = {
+ 21,
+ -1, 3, 1262,
+ 41, 0, 1010,
+ 47, 0, 344,
+ 53, 0, 487,
+ 64, 0, 488,
+ 65, 0, 489,
+ 66, 0, 490,
+ 67, 0, 491,
+ 68, 0, 492,
+ 69, 0, 493,
+ 70, 0, 494,
+ 71, 0, 495,
+ 72, 0, 496,
+ 73, 0, 497,
+ 74, 0, 498,
+ 75, 0, 499,
+ 76, 0, 500,
+ 77, 0, 501,
+ 78, 0, 502,
+ 81, 0, 345,
+ 82, 0, 503
};
-static int parser_action_row1248[] = {
+static int parser_action_row1264[] = {
1,
-1, 1, 807
};
-static int parser_action_row1249[] = {
+static int parser_action_row1265[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1250[] = {
- 1,
- -1, 1, 141
-};
-static int parser_action_row1251[] = {
- 1,
- -1, 1, 154
-};
-static int parser_action_row1252[] = {
+static int parser_action_row1266[] = {
1,
- -1, 1, 395
+ -1, 1, 125
};
-static int parser_action_row1253[] = {
+static int parser_action_row1267[] = {
1,
-1, 1, 54
};
-static int parser_action_row1254[] = {
+static int parser_action_row1268[] = {
2,
- -1, 3, 1253,
- 83, 0, 1004
+ -1, 3, 1267,
+ 81, 0, 1021
};
-static int parser_action_row1255[] = {
+static int parser_action_row1269[] = {
1,
-1, 1, 49
};
-static int parser_action_row1256[] = {
+static int parser_action_row1270[] = {
1,
-1, 1, 803
};
-static int parser_action_row1257[] = {
+static int parser_action_row1271[] = {
2,
- -1, 3, 1256,
- 57, 0, 1333
+ -1, 3, 1270,
+ 54, 0, 1343
};
-static int parser_action_row1258[] = {
+static int parser_action_row1272[] = {
1,
-1, 1, 32
};
-static int parser_action_row1259[] = {
+static int parser_action_row1273[] = {
3,
-1, 1, 42,
- 9, 0, 1334,
+ 9, 0, 1344,
13, 0, 27
};
-static int parser_action_row1260[] = {
+static int parser_action_row1274[] = {
1,
-1, 1, 36
};
-static int parser_action_row1261[] = {
+static int parser_action_row1275[] = {
2,
- -1, 1, 92,
- 14, 0, 712
+ -1, 1, 77,
+ 14, 0, 725
};
-static int parser_action_row1262[] = {
- 17,
- -1, 3, 1261,
- 56, 0, 479,
- 67, 0, 480,
- 68, 0, 481,
- 69, 0, 482,
- 70, 0, 483,
- 71, 0, 484,
- 72, 0, 485,
- 73, 0, 486,
- 74, 0, 487,
- 75, 0, 488,
- 76, 0, 489,
- 77, 0, 490,
- 78, 0, 491,
- 79, 0, 492,
- 80, 0, 493,
- 84, 0, 494
+static int parser_action_row1276[] = {
+ 18,
+ -1, 3, 1275,
+ 53, 0, 487,
+ 64, 0, 488,
+ 65, 0, 489,
+ 66, 0, 490,
+ 67, 0, 491,
+ 68, 0, 492,
+ 69, 0, 493,
+ 70, 0, 494,
+ 71, 0, 495,
+ 72, 0, 496,
+ 73, 0, 497,
+ 74, 0, 498,
+ 75, 0, 499,
+ 76, 0, 500,
+ 77, 0, 501,
+ 78, 0, 502,
+ 82, 0, 503
};
-static int parser_action_row1263[] = {
+static int parser_action_row1277[] = {
2,
- -1, 3, 1262,
- 83, 0, 1337
+ -1, 3, 1276,
+ 81, 0, 1347
};
-static int parser_action_row1264[] = {
- 21,
- -1, 1, 385,
+static int parser_action_row1278[] = {
+ 22,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 54, 0, 615,
- 56, 0, 479,
- 59, 0, 616,
- 67, 0, 480,
- 68, 0, 481,
- 69, 0, 482,
- 70, 0, 483,
- 71, 0, 484,
- 72, 0, 485,
- 73, 0, 486,
- 74, 0, 487,
- 75, 0, 488,
- 76, 0, 489,
- 77, 0, 490,
- 78, 0, 491,
- 79, 0, 492,
- 80, 0, 493,
- 84, 0, 494
-};
-static int parser_action_row1265[] = {
- 1,
- -1, 1, 95
-};
-static int parser_action_row1266[] = {
- 1,
- -1, 1, 96
+ 51, 0, 627,
+ 53, 0, 487,
+ 56, 0, 628,
+ 64, 0, 488,
+ 65, 0, 489,
+ 66, 0, 490,
+ 67, 0, 491,
+ 68, 0, 492,
+ 69, 0, 493,
+ 70, 0, 494,
+ 71, 0, 495,
+ 72, 0, 496,
+ 73, 0, 497,
+ 74, 0, 498,
+ 75, 0, 499,
+ 76, 0, 500,
+ 77, 0, 501,
+ 78, 0, 502,
+ 82, 0, 503
};
-static int parser_action_row1267[] = {
- 3,
- -1, 3, 1266,
- 84, 0, 1340,
- 85, 0, 1341
+static int parser_action_row1279[] = {
+ 2,
+ -1, 3, 1278,
+ 82, 0, 1350
};
-static int parser_action_row1268[] = {
- 21,
- -1, 1, 385,
+static int parser_action_row1280[] = {
+ 22,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 54, 0, 615,
- 56, 0, 479,
- 59, 0, 616,
- 67, 0, 480,
- 68, 0, 481,
- 69, 0, 482,
- 70, 0, 483,
- 71, 0, 484,
- 72, 0, 485,
- 73, 0, 486,
- 74, 0, 487,
- 75, 0, 488,
- 76, 0, 489,
- 77, 0, 490,
- 78, 0, 491,
- 79, 0, 492,
- 80, 0, 493,
- 84, 0, 494
-};
-static int parser_action_row1269[] = {
- 3,
- -1, 3, 1268,
- 17, 0, 1265,
- 18, 0, 1344
-};
-static int parser_action_row1270[] = {
- 5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
-};
-static int parser_action_row1271[] = {
- 2,
- -1, 3, 1270,
- 18, 0, 1346
+ 51, 0, 627,
+ 53, 0, 487,
+ 56, 0, 628,
+ 64, 0, 488,
+ 65, 0, 489,
+ 66, 0, 490,
+ 67, 0, 491,
+ 68, 0, 492,
+ 69, 0, 493,
+ 70, 0, 494,
+ 71, 0, 495,
+ 72, 0, 496,
+ 73, 0, 497,
+ 74, 0, 498,
+ 75, 0, 499,
+ 76, 0, 500,
+ 77, 0, 501,
+ 78, 0, 502,
+ 82, 0, 503
};
-static int parser_action_row1272[] = {
+static int parser_action_row1281[] = {
1,
- -1, 1, 749
+ -1, 1, 748
};
-static int parser_action_row1273[] = {
+static int parser_action_row1282[] = {
1,
- -1, 1, 754
+ -1, 1, 753
};
-static int parser_action_row1274[] = {
+static int parser_action_row1283[] = {
1,
- -1, 1, 751
+ -1, 1, 750
};
-static int parser_action_row1275[] = {
+static int parser_action_row1284[] = {
3,
- -1, 3, 1274,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 1283,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row1276[] = {
+static int parser_action_row1285[] = {
35,
- -1, 1, 367,
- 12, 0, 152,
+ -1, 1, 358,
+ 12, 0, 155,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 153,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 34, 0, 154,
- 36, 0, 910,
- 37, 0, 911,
- 38, 0, 912,
- 39, 0, 913,
- 40, 0, 39,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 50, 0, 338,
- 51, 0, 157,
- 53, 0, 914,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 82, 0, 180,
- 83, 0, 915,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 156,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 31, 0, 157,
+ 33, 0, 928,
+ 34, 0, 929,
+ 35, 0, 930,
+ 36, 0, 931,
+ 37, 0, 39,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 47, 0, 344,
+ 48, 0, 160,
+ 50, 0, 932,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 80, 0, 184,
+ 81, 0, 933,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1277[] = {
+static int parser_action_row1286[] = {
1,
- -1, 1, 332
+ -1, 1, 324
};
-static int parser_action_row1278[] = {
+static int parser_action_row1287[] = {
4,
- -1, 1, 537,
- 61, 0, 1349,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 532,
+ 58, 0, 1355,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row1279[] = {
+static int parser_action_row1288[] = {
4,
- -1, 1, 539,
- 61, 0, 1351,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 534,
+ 58, 0, 1357,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row1280[] = {
+static int parser_action_row1289[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1281[] = {
+static int parser_action_row1290[] = {
4,
- -1, 1, 543,
- 61, 0, 1354,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 538,
+ 58, 0, 1360,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row1282[] = {
+static int parser_action_row1291[] = {
1,
- -1, 1, 335
+ -1, 1, 327
};
-static int parser_action_row1283[] = {
+static int parser_action_row1292[] = {
2,
- -1, 1, 565,
- 58, 0, 1070
+ -1, 1, 561,
+ 55, 0, 1087
};
-static int parser_action_row1284[] = {
+static int parser_action_row1293[] = {
1,
-1, 1, 38
};
-static int parser_action_row1285[] = {
+static int parser_action_row1294[] = {
1,
-1, 1, 29
};
-static int parser_action_row1286[] = {
+static int parser_action_row1295[] = {
4,
-1, 1, 42,
- 9, 0, 1356,
+ 9, 0, 1362,
13, 0, 27,
- 44, 0, 1011
+ 41, 0, 1029
};
-static int parser_action_row1287[] = {
+static int parser_action_row1296[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1288[] = {
+static int parser_action_row1297[] = {
3,
-1, 1, 42,
- 9, 0, 1358,
+ 9, 0, 1364,
13, 0, 27
};
-static int parser_action_row1289[] = {
+static int parser_action_row1298[] = {
1,
-1, 1, 31
};
-static int parser_action_row1290[] = {
+static int parser_action_row1299[] = {
3,
-1, 1, 42,
- 9, 0, 1359,
+ 9, 0, 1365,
13, 0, 27
};
-static int parser_action_row1291[] = {
+static int parser_action_row1300[] = {
1,
-1, 1, 35
};
-static int parser_action_row1292[] = {
+static int parser_action_row1301[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1293[] = {
+static int parser_action_row1302[] = {
1,
- -1, 1, 303
+ -1, 1, 276
};
-static int parser_action_row1294[] = {
+static int parser_action_row1303[] = {
20,
- -1, 1, 367,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 358,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row1295[] = {
+static int parser_action_row1304[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1296[] = {
+static int parser_action_row1305[] = {
1,
- -1, 1, 555
+ -1, 1, 540
};
-static int parser_action_row1297[] = {
+static int parser_action_row1306[] = {
1,
- -1, 1, 659
+ -1, 1, 658
};
-static int parser_action_row1298[] = {
+static int parser_action_row1307[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1299[] = {
+static int parser_action_row1308[] = {
2,
- -1, 3, 1298,
- 27, 0, 1364
+ -1, 3, 1307,
+ 24, 0, 1370
};
-static int parser_action_row1300[] = {
+static int parser_action_row1309[] = {
1,
- -1, 1, 677
+ -1, 1, 676
};
-static int parser_action_row1301[] = {
+static int parser_action_row1310[] = {
2,
- -1, 3, 1300,
- 52, 0, 171
+ -1, 3, 1309,
+ 49, 0, 175
};
-static int parser_action_row1302[] = {
+static int parser_action_row1311[] = {
3,
- -1, 3, 1301,
- 55, 0, 1366,
- 58, 0, 556
+ -1, 3, 1310,
+ 52, 0, 1372,
+ 55, 0, 566
};
-static int parser_action_row1303[] = {
+static int parser_action_row1312[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1304[] = {
+static int parser_action_row1313[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1305[] = {
+static int parser_action_row1314[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1306[] = {
+static int parser_action_row1315[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1307[] = {
+static int parser_action_row1316[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1308[] = {
+static int parser_action_row1317[] = {
2,
- -1, 1, 198,
- 27, 1, 650
+ -1, 1, 182,
+ 24, 1, 649
};
-static int parser_action_row1309[] = {
+static int parser_action_row1318[] = {
2,
- -1, 1, 200,
- 27, 1, 652
+ -1, 1, 184,
+ 24, 1, 651
};
-static int parser_action_row1310[] = {
+static int parser_action_row1319[] = {
23,
- -1, 1, 353,
- 12, 0, 106,
- 25, 0, 107,
- 34, 0, 108,
- 41, 0, 109,
- 43, 0, 110,
- 44, 1, 367,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 51, 0, 115,
- 54, 0, 379,
- 68, 0, 117,
- 83, 0, 48,
- 84, 0, 49,
- 85, 1, 367,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ -1, 1, 344,
+ 12, 0, 107,
+ 22, 0, 108,
+ 31, 0, 109,
+ 38, 0, 110,
+ 40, 0, 111,
+ 41, 1, 358,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 48, 0, 116,
+ 51, 0, 385,
+ 65, 0, 118,
+ 81, 0, 48,
+ 82, 0, 49,
+ 83, 1, 358,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row1311[] = {
+static int parser_action_row1320[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1312[] = {
+static int parser_action_row1321[] = {
1,
- -1, 1, 237
+ -1, 1, 221
};
-static int parser_action_row1313[] = {
+static int parser_action_row1322[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1314[] = {
+static int parser_action_row1323[] = {
+ 2,
+ -1, 3, 1322,
+ 52, 0, 1381
+};
+static int parser_action_row1324[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1315[] = {
+static int parser_action_row1325[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row1316[] = {
+static int parser_action_row1326[] = {
1,
- -1, 1, 321
+ -1, 1, 308
};
-static int parser_action_row1317[] = {
+static int parser_action_row1327[] = {
1,
- -1, 1, 339
+ -1, 1, 330
};
-static int parser_action_row1318[] = {
+static int parser_action_row1328[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1319[] = {
+static int parser_action_row1329[] = {
1,
- -1, 1, 570
+ -1, 1, 566
};
-static int parser_action_row1320[] = {
+static int parser_action_row1330[] = {
3,
- -1, 3, 1319,
- 83, 0, 48,
- 84, 0, 49
+ -1, 3, 1329,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row1321[] = {
+static int parser_action_row1331[] = {
2,
- -1, 3, 1320,
- 85, 0, 1378
+ -1, 3, 1330,
+ 83, 0, 1385
};
-static int parser_action_row1322[] = {
+static int parser_action_row1332[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row1323[] = {
+static int parser_action_row1333[] = {
1,
- -1, 1, 408
+ -1, 1, 397
};
-static int parser_action_row1324[] = {
+static int parser_action_row1334[] = {
2,
- -1, 1, 319,
- 82, 0, 180
+ -1, 1, 306,
+ 80, 0, 184
};
-static int parser_action_row1325[] = {
+static int parser_action_row1335[] = {
1,
- -1, 1, 400
+ -1, 1, 389
};
-static int parser_action_row1326[] = {
+static int parser_action_row1336[] = {
1,
- -1, 1, 442
+ -1, 1, 434
};
-static int parser_action_row1327[] = {
+static int parser_action_row1337[] = {
3,
- -1, 3, 1326,
- 34, 0, 1381,
- 54, 0, 1382
+ -1, 3, 1336,
+ 31, 0, 1388,
+ 51, 0, 1389
};
-static int parser_action_row1328[] = {
+static int parser_action_row1338[] = {
1,
- -1, 1, 437
+ -1, 1, 429
};
-static int parser_action_row1329[] = {
+static int parser_action_row1339[] = {
1,
- -1, 1, 439
+ -1, 1, 431
};
-static int parser_action_row1330[] = {
+static int parser_action_row1340[] = {
36,
- -1, 1, 367,
- 0, 0, 82,
- 1, 0, 83,
- 12, 0, 106,
+ -1, 1, 358,
+ 0, 0, 83,
+ 1, 0, 84,
+ 12, 0, 107,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 107,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 34, 0, 108,
- 36, 0, 1141,
- 37, 0, 1142,
- 38, 0, 1143,
- 39, 0, 1144,
- 40, 0, 39,
- 41, 0, 109,
- 43, 0, 110,
- 45, 0, 111,
- 46, 0, 112,
- 47, 0, 113,
- 48, 0, 114,
- 50, 0, 338,
- 51, 0, 115,
- 53, 0, 1145,
- 54, 0, 1383,
- 68, 0, 117,
- 82, 0, 180,
- 83, 0, 915,
- 84, 0, 49,
- 86, 0, 118,
- 87, 0, 119,
- 88, 0, 120,
- 89, 0, 121,
- 90, 0, 54,
- 93, 0, 122
+ 16, 0, 29,
+ 22, 0, 108,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 31, 0, 109,
+ 33, 0, 1155,
+ 34, 0, 1156,
+ 35, 0, 1157,
+ 36, 0, 1158,
+ 37, 0, 39,
+ 38, 0, 110,
+ 40, 0, 111,
+ 42, 0, 112,
+ 43, 0, 113,
+ 44, 0, 114,
+ 45, 0, 115,
+ 47, 0, 344,
+ 48, 0, 116,
+ 50, 0, 1159,
+ 51, 0, 1390,
+ 65, 0, 118,
+ 80, 0, 184,
+ 81, 0, 933,
+ 82, 0, 49,
+ 84, 0, 119,
+ 85, 0, 120,
+ 86, 0, 121,
+ 87, 0, 122,
+ 88, 0, 54,
+ 91, 0, 123
};
-static int parser_action_row1331[] = {
+static int parser_action_row1341[] = {
1,
- -1, 1, 136
+ -1, 1, 120
};
-static int parser_action_row1332[] = {
+static int parser_action_row1342[] = {
5,
- -1, 3, 1331,
- 34, 0, 1387,
- 50, 0, 1388,
- 54, 0, 1389,
- 83, 0, 339
+ -1, 3, 1341,
+ 31, 0, 1394,
+ 47, 0, 1395,
+ 51, 0, 1396,
+ 81, 0, 345
};
-static int parser_action_row1333[] = {
+static int parser_action_row1343[] = {
1,
-1, 1, 52
};
-static int parser_action_row1334[] = {
+static int parser_action_row1344[] = {
1,
-1, 1, 50
};
-static int parser_action_row1335[] = {
+static int parser_action_row1345[] = {
1,
-1, 1, 40
};
-static int parser_action_row1336[] = {
+static int parser_action_row1346[] = {
1,
-1, 1, 55
};
-static int parser_action_row1337[] = {
+static int parser_action_row1347[] = {
5,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 54, 0, 615,
- 59, 0, 616
+ 51, 0, 627,
+ 56, 0, 628
};
-static int parser_action_row1338[] = {
+static int parser_action_row1348[] = {
2,
- -1, 3, 1337,
- 59, 0, 616
+ -1, 3, 1347,
+ 56, 0, 628
};
-static int parser_action_row1339[] = {
+static int parser_action_row1349[] = {
5,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 54, 0, 615,
- 59, 0, 616
+ 51, 0, 627,
+ 56, 0, 628
};
-static int parser_action_row1340[] = {
+static int parser_action_row1350[] = {
3,
- -1, 3, 1339,
- 14, 0, 1394,
- 15, 0, 1395
+ -1, 3, 1349,
+ 14, 0, 1401,
+ 15, 0, 1402
};
-static int parser_action_row1341[] = {
- 2,
- -1, 1, 166,
- 59, 0, 287
-};
-static int parser_action_row1342[] = {
+static int parser_action_row1351[] = {
2,
- -1, 1, 166,
- 59, 0, 287
+ -1, 1, 150,
+ 56, 0, 292
};
-static int parser_action_row1343[] = {
+static int parser_action_row1352[] = {
5,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 54, 0, 615,
- 59, 0, 616
+ 51, 0, 627,
+ 56, 0, 628
};
-static int parser_action_row1344[] = {
+static int parser_action_row1353[] = {
3,
- -1, 1, 135,
- 4, 0, 720,
- 14, 0, 1400
-};
-static int parser_action_row1345[] = {
- 2,
- -1, 3, 1344,
- 85, 0, 1403
-};
-static int parser_action_row1346[] = {
- 2,
- -1, 3, 1345,
- 18, 0, 1404
-};
-static int parser_action_row1347[] = {
- 2,
- -1, 3, 1346,
- 85, 0, 1405
+ -1, 1, 119,
+ 4, 0, 733,
+ 14, 0, 734
};
-static int parser_action_row1348[] = {
+static int parser_action_row1354[] = {
2,
- -1, 3, 1347,
- 59, 0, 1406
+ -1, 3, 1353,
+ 56, 0, 1409
};
-static int parser_action_row1349[] = {
+static int parser_action_row1355[] = {
2,
- -1, 3, 1348,
- 55, 0, 1407
+ -1, 3, 1354,
+ 52, 0, 1410
};
-static int parser_action_row1350[] = {
+static int parser_action_row1356[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1351[] = {
+static int parser_action_row1357[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1352[] = {
+static int parser_action_row1358[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1353[] = {
+static int parser_action_row1359[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1354[] = {
+static int parser_action_row1360[] = {
5,
- -1, 1, 367,
- 12, 0, 543,
- 49, 0, 544,
- 83, 0, 48,
- 84, 0, 49
+ -1, 1, 358,
+ 12, 0, 553,
+ 46, 0, 554,
+ 81, 0, 48,
+ 82, 0, 49
};
-static int parser_action_row1355[] = {
+static int parser_action_row1361[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1356[] = {
+static int parser_action_row1362[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1357[] = {
+static int parser_action_row1363[] = {
1,
-1, 1, 33
};
-static int parser_action_row1358[] = {
+static int parser_action_row1364[] = {
3,
-1, 1, 42,
- 9, 0, 1416,
+ 9, 0, 1419,
13, 0, 27
};
-static int parser_action_row1359[] = {
+static int parser_action_row1365[] = {
1,
-1, 1, 37
};
-static int parser_action_row1360[] = {
+static int parser_action_row1366[] = {
1,
-1, 1, 39
};
-static int parser_action_row1361[] = {
+static int parser_action_row1367[] = {
2,
- -1, 3, 1360,
- 55, 0, 1417
+ -1, 3, 1366,
+ 52, 0, 1420
};
-static int parser_action_row1362[] = {
+static int parser_action_row1368[] = {
1,
- -1, 1, 503
+ -1, 1, 495
};
-static int parser_action_row1363[] = {
+static int parser_action_row1369[] = {
2,
- -1, 3, 1362,
- 55, 0, 1418
+ -1, 3, 1368,
+ 52, 0, 1421
};
-static int parser_action_row1364[] = {
+static int parser_action_row1370[] = {
1,
- -1, 1, 660
+ -1, 1, 659
};
-static int parser_action_row1365[] = {
+static int parser_action_row1371[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 1041,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 9, 0, 1057,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1366[] = {
+static int parser_action_row1372[] = {
2,
- -1, 1, 234,
- 27, 1, 676
+ -1, 1, 218,
+ 24, 1, 675
};
-static int parser_action_row1367[] = {
+static int parser_action_row1373[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1368[] = {
+static int parser_action_row1374[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1369[] = {
+static int parser_action_row1375[] = {
1,
- -1, 1, 661
+ -1, 1, 660
};
-static int parser_action_row1370[] = {
+static int parser_action_row1376[] = {
1,
- -1, 1, 666
+ -1, 1, 665
};
-static int parser_action_row1371[] = {
+static int parser_action_row1377[] = {
1,
- -1, 1, 663
+ -1, 1, 662
};
-static int parser_action_row1372[] = {
+static int parser_action_row1378[] = {
1,
- -1, 1, 668
+ -1, 1, 667
};
-static int parser_action_row1373[] = {
+static int parser_action_row1379[] = {
2,
- -1, 1, 199,
- 27, 1, 651
+ -1, 1, 183,
+ 24, 1, 650
};
-static int parser_action_row1374[] = {
+static int parser_action_row1380[] = {
2,
- -1, 3, 1373,
- 15, 0, 1422
+ -1, 3, 1379,
+ 15, 0, 1425
};
-static int parser_action_row1375[] = {
+static int parser_action_row1381[] = {
1,
- -1, 1, 247
+ -1, 1, 231
};
-static int parser_action_row1376[] = {
+static int parser_action_row1382[] = {
+ 2,
+ -1, 1, 306,
+ 80, 0, 184
+};
+static int parser_action_row1383[] = {
1,
- -1, 1, 745
+ -1, 1, 744
};
-static int parser_action_row1377[] = {
+static int parser_action_row1384[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1378[] = {
+static int parser_action_row1385[] = {
2,
- -1, 1, 349,
- 54, 0, 238
+ -1, 1, 340,
+ 51, 0, 242
};
-static int parser_action_row1379[] = {
+static int parser_action_row1386[] = {
3,
- -1, 1, 435,
- 64, 1, 437,
- 66, 1, 437
+ -1, 1, 426,
+ 61, 1, 429,
+ 63, 1, 429
};
-static int parser_action_row1380[] = {
+static int parser_action_row1387[] = {
1,
- -1, 1, 455
+ -1, 1, 451
};
-static int parser_action_row1381[] = {
+static int parser_action_row1388[] = {
1,
- -1, 1, 401
+ -1, 1, 390
};
-static int parser_action_row1382[] = {
+static int parser_action_row1389[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1383[] = {
+static int parser_action_row1390[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1384[] = {
+static int parser_action_row1391[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1385[] = {
+static int parser_action_row1392[] = {
3,
- -1, 3, 1384,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 1391,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row1386[] = {
+static int parser_action_row1393[] = {
1,
- -1, 1, 326
+ -1, 1, 318
};
-static int parser_action_row1387[] = {
+static int parser_action_row1394[] = {
3,
- -1, 3, 1386,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 1393,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row1388[] = {
+static int parser_action_row1395[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1389[] = {
+static int parser_action_row1396[] = {
2,
- -1, 1, 146,
- 83, 0, 469
+ -1, 1, 130,
+ 81, 0, 477
};
-static int parser_action_row1390[] = {
+static int parser_action_row1397[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1391[] = {
+static int parser_action_row1398[] = {
1,
- -1, 1, 144
+ -1, 1, 128
};
-static int parser_action_row1392[] = {
+static int parser_action_row1399[] = {
4,
- -1, 1, 135,
- 4, 0, 720,
- 14, 0, 1432,
- 15, 0, 1433
+ -1, 1, 119,
+ 4, 0, 733,
+ 14, 0, 734,
+ 15, 0, 1436
};
-static int parser_action_row1393[] = {
+static int parser_action_row1400[] = {
2,
- -1, 1, 92,
- 14, 0, 712
+ -1, 1, 77,
+ 14, 0, 725
};
-static int parser_action_row1394[] = {
+static int parser_action_row1401[] = {
3,
- -1, 3, 1393,
- 14, 0, 1394,
- 15, 0, 1438
+ -1, 3, 1400,
+ 14, 0, 1401,
+ 15, 0, 1441
};
-static int parser_action_row1395[] = {
+static int parser_action_row1402[] = {
4,
-1, 1, 42,
- 0, 0, 82,
- 1, 0, 83,
+ 0, 0, 83,
+ 1, 0, 84,
13, 0, 27
};
-static int parser_action_row1396[] = {
+static int parser_action_row1403[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row1397[] = {
- 2,
- -1, 3, 1396,
- 15, 0, 1443
-};
-static int parser_action_row1398[] = {
- 6,
- -1, 1, 42,
- 0, 1, 92,
- 1, 1, 92,
- 13, 0, 27,
- 14, 0, 712,
- 61, 0, 1444
-};
-static int parser_action_row1399[] = {
- 2,
- -1, 1, 67,
- 61, 0, 1448
-};
-static int parser_action_row1400[] = {
- 3,
- -1, 1, 135,
- 4, 0, 720,
- 14, 0, 1449
-};
-static int parser_action_row1401[] = {
- 6,
- -1, 1, 42,
- 0, 0, 82,
- 1, 0, 83,
- 13, 0, 27,
- 19, 0, 1452,
- 20, 0, 1453
-};
-static int parser_action_row1402[] = {
- 2,
- -1, 1, 135,
- 4, 0, 720
-};
-static int parser_action_row1403[] = {
- 3,
- -1, 3, 1402,
- 31, 0, 34,
- 96, 0, 56
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row1404[] = {
2,
- -1, 1, 166,
- 59, 0, 287
+ -1, 3, 1403,
+ 15, 0, 1446
};
static int parser_action_row1405[] = {
- 2,
- -1, 3, 1404,
- 85, 0, 1457
+ 3,
+ -1, 1, 77,
+ 14, 0, 725,
+ 58, 0, 1447
};
static int parser_action_row1406[] = {
- 2,
- -1, 1, 166,
- 59, 0, 287
+ 3,
+ -1, 1, 119,
+ 4, 0, 733,
+ 14, 0, 734
};
static int parser_action_row1407[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 2,
+ -1, 1, 119,
+ 4, 0, 733
};
static int parser_action_row1408[] = {
- 4,
+ 3,
-1, 3, 1407,
- 0, 0, 82,
- 1, 0, 83,
- 82, 0, 180
+ 28, 0, 34,
+ 94, 0, 56
};
static int parser_action_row1409[] = {
1,
- -1, 1, 492
+ -1, 1, 60
};
static int parser_action_row1410[] = {
- 1,
- -1, 1, 497
+ 22,
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
static int parser_action_row1411[] = {
- 1,
- -1, 1, 494
+ 4,
+ -1, 3, 1410,
+ 0, 0, 83,
+ 1, 0, 84,
+ 80, 0, 184
};
static int parser_action_row1412[] = {
1,
- -1, 1, 499
+ -1, 1, 484
};
static int parser_action_row1413[] = {
- 2,
- -1, 3, 1412,
- 85, 0, 1462
+ 1,
+ -1, 1, 489
};
static int parser_action_row1414[] = {
- 2,
- -1, 1, 349,
- 54, 0, 238
+ 1,
+ -1, 1, 486
};
static int parser_action_row1415[] = {
1,
- -1, 1, 495
+ -1, 1, 491
};
static int parser_action_row1416[] = {
- 1,
- -1, 1, 500
+ 2,
+ -1, 3, 1415,
+ 83, 0, 1457
};
static int parser_action_row1417[] = {
- 1,
- -1, 1, 41
+ 2,
+ -1, 1, 340,
+ 51, 0, 242
};
static int parser_action_row1418[] = {
1,
- -1, 1, 304
+ -1, 1, 487
};
static int parser_action_row1419[] = {
1,
- -1, 1, 556
+ -1, 1, 492
};
static int parser_action_row1420[] = {
1,
- -1, 1, 673
+ -1, 1, 41
};
static int parser_action_row1421[] = {
- 2,
- -1, 3, 1420,
- 31, 0, 1464
+ 1,
+ -1, 1, 277
};
static int parser_action_row1422[] = {
- 2,
- -1, 3, 1421,
- 15, 0, 1465
+ 1,
+ -1, 1, 541
};
static int parser_action_row1423[] = {
+ 1,
+ -1, 1, 672
+};
+static int parser_action_row1424[] = {
+ 2,
+ -1, 3, 1423,
+ 28, 0, 1459
+};
+static int parser_action_row1425[] = {
+ 2,
+ -1, 3, 1424,
+ 15, 0, 1460
+};
+static int parser_action_row1426[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 139,
+ 9, 0, 142,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1424[] = {
+static int parser_action_row1427[] = {
+ 1,
+ -1, 1, 313
+};
+static int parser_action_row1428[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1425[] = {
+static int parser_action_row1429[] = {
1,
- -1, 1, 444
+ -1, 1, 436
};
-static int parser_action_row1426[] = {
+static int parser_action_row1430[] = {
2,
- -1, 3, 1425,
- 48, 0, 1469
+ -1, 3, 1429,
+ 45, 0, 1464
};
-static int parser_action_row1427[] = {
+static int parser_action_row1431[] = {
4,
- -1, 3, 1426,
- 34, 0, 1470,
- 50, 0, 338,
- 83, 0, 339
+ -1, 3, 1430,
+ 31, 0, 1465,
+ 47, 0, 344,
+ 81, 0, 345
};
-static int parser_action_row1428[] = {
+static int parser_action_row1432[] = {
35,
- -1, 1, 367,
- 12, 0, 152,
+ -1, 1, 358,
+ 12, 0, 155,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 153,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 34, 0, 154,
- 36, 0, 910,
- 37, 0, 911,
- 38, 0, 912,
- 39, 0, 913,
- 40, 0, 39,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 50, 0, 338,
- 51, 0, 157,
- 53, 0, 914,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 82, 0, 180,
- 83, 0, 915,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 156,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 31, 0, 157,
+ 33, 0, 928,
+ 34, 0, 929,
+ 35, 0, 930,
+ 36, 0, 931,
+ 37, 0, 39,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 47, 0, 344,
+ 48, 0, 160,
+ 50, 0, 932,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 80, 0, 184,
+ 81, 0, 933,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1429[] = {
+static int parser_action_row1433[] = {
1,
- -1, 1, 327
+ -1, 1, 319
};
-static int parser_action_row1430[] = {
+static int parser_action_row1434[] = {
1,
- -1, 1, 330
+ -1, 1, 322
};
-static int parser_action_row1431[] = {
+static int parser_action_row1435[] = {
2,
- -1, 3, 1430,
- 50, 0, 1473
+ -1, 3, 1434,
+ 47, 0, 1468
};
-static int parser_action_row1432[] = {
+static int parser_action_row1436[] = {
4,
- -1, 3, 1431,
- 34, 0, 1474,
- 50, 0, 1475,
- 83, 0, 339
-};
-static int parser_action_row1433[] = {
- 7,
- -1, 1, 42,
- 0, 0, 82,
- 1, 0, 83,
- 6, 0, 1477,
- 13, 0, 27,
- 19, 0, 1478,
- 20, 0, 1479
+ -1, 3, 1435,
+ 31, 0, 1469,
+ 47, 0, 1470,
+ 81, 0, 345
};
-static int parser_action_row1434[] = {
+static int parser_action_row1437[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1435[] = {
+static int parser_action_row1438[] = {
3,
- -1, 1, 135,
- 4, 0, 720,
- 15, 0, 1481
+ -1, 1, 119,
+ 4, 0, 733,
+ 15, 0, 1473
};
-static int parser_action_row1436[] = {
+static int parser_action_row1439[] = {
3,
- -1, 3, 1435,
- 31, 0, 34,
- 96, 0, 56
+ -1, 3, 1438,
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row1437[] = {
+static int parser_action_row1440[] = {
1,
-1, 1, 59
};
-static int parser_action_row1438[] = {
+static int parser_action_row1441[] = {
1,
- -1, 1, 83
+ -1, 1, 70
};
-static int parser_action_row1439[] = {
+static int parser_action_row1442[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1440[] = {
+static int parser_action_row1443[] = {
2,
- -1, 3, 1439,
- 15, 0, 1485
+ -1, 3, 1442,
+ 15, 0, 1477
};
-static int parser_action_row1441[] = {
+static int parser_action_row1444[] = {
1,
- -1, 1, 93
+ -1, 1, 78
};
-static int parser_action_row1442[] = {
+static int parser_action_row1445[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1443[] = {
+static int parser_action_row1446[] = {
2,
- -1, 1, 378,
- 9, 0, 1000
+ -1, 1, 369,
+ 9, 0, 1017
};
-static int parser_action_row1444[] = {
+static int parser_action_row1447[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1445[] = {
+static int parser_action_row1448[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1446[] = {
- 5,
- -1, 1, 97,
- 21, 0, 196,
- 22, 0, 197,
- 23, 0, 198,
- 24, 0, 199
-};
-static int parser_action_row1447[] = {
- 1,
- -1, 1, 75
-};
-static int parser_action_row1448[] = {
- 3,
- -1, 1, 92,
- 14, 0, 712,
- 61, 0, 1491
-};
static int parser_action_row1449[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ 1,
+ -1, 1, 64
};
static int parser_action_row1450[] = {
- 6,
- -1, 1, 42,
- 0, 0, 82,
- 1, 0, 83,
- 13, 0, 27,
- 19, 0, 1494,
- 20, 0, 1495
-};
-static int parser_action_row1451[] = {
2,
- -1, 1, 135,
- 4, 0, 720
+ -1, 1, 119,
+ 4, 0, 733
};
-static int parser_action_row1452[] = {
+static int parser_action_row1451[] = {
3,
- -1, 3, 1451,
- 31, 0, 34,
- 96, 0, 56
+ -1, 3, 1450,
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row1453[] = {
+static int parser_action_row1452[] = {
1,
- -1, 1, 62
-};
-static int parser_action_row1454[] = {
- 2,
- -1, 1, 149,
- 89, 0, 997
+ -1, 1, 61
};
-static int parser_action_row1455[] = {
+static int parser_action_row1453[] = {
3,
- -1, 3, 1454,
- 31, 0, 34,
- 96, 0, 56
+ -1, 3, 1452,
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row1456[] = {
+static int parser_action_row1454[] = {
1,
- -1, 1, 86
-};
-static int parser_action_row1457[] = {
- 2,
- -1, 1, 68,
- 61, 0, 1500
-};
-static int parser_action_row1458[] = {
- 2,
- -1, 1, 166,
- 59, 0, 287
-};
-static int parser_action_row1459[] = {
- 2,
- -1, 1, 69,
- 61, 0, 1502
+ -1, 1, 71
};
-static int parser_action_row1460[] = {
+static int parser_action_row1455[] = {
1,
- -1, 1, 760
+ -1, 1, 759
};
-static int parser_action_row1461[] = {
+static int parser_action_row1456[] = {
3,
- -1, 3, 1460,
- 0, 0, 82,
- 1, 0, 83
+ -1, 3, 1455,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row1462[] = {
+static int parser_action_row1457[] = {
1,
- -1, 1, 333
+ -1, 1, 325
};
-static int parser_action_row1463[] = {
+static int parser_action_row1458[] = {
4,
- -1, 1, 536,
- 61, 0, 1504,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 531,
+ 58, 0, 1486,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row1464[] = {
+static int parser_action_row1459[] = {
4,
- -1, 1, 538,
- 61, 0, 1506,
- 62, 0, 365,
- 63, 0, 366
+ -1, 1, 533,
+ 58, 0, 1488,
+ 59, 0, 371,
+ 60, 0, 372
};
-static int parser_action_row1465[] = {
+static int parser_action_row1460[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1466[] = {
+static int parser_action_row1461[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 749,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 9, 0, 762,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1467[] = {
+static int parser_action_row1462[] = {
1,
- -1, 1, 238
+ -1, 1, 222
};
-static int parser_action_row1468[] = {
+static int parser_action_row1463[] = {
2,
- -1, 3, 1467,
- 52, 0, 171
+ -1, 3, 1462,
+ 49, 0, 175
};
-static int parser_action_row1469[] = {
+static int parser_action_row1464[] = {
2,
- -1, 3, 1468,
- 27, 0, 1512
+ -1, 3, 1463,
+ 24, 0, 1494
};
-static int parser_action_row1470[] = {
+static int parser_action_row1465[] = {
1,
- -1, 1, 458
+ -1, 1, 439
};
-static int parser_action_row1471[] = {
+static int parser_action_row1466[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1472[] = {
+static int parser_action_row1467[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1473[] = {
+static int parser_action_row1468[] = {
2,
- -1, 3, 1472,
- 55, 0, 1515
+ -1, 3, 1467,
+ 52, 0, 1497
};
-static int parser_action_row1474[] = {
+static int parser_action_row1469[] = {
1,
- -1, 1, 148
+ -1, 1, 132
};
-static int parser_action_row1475[] = {
+static int parser_action_row1470[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1476[] = {
+static int parser_action_row1471[] = {
4,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2,
- 83, 0, 469
+ 81, 0, 477
};
-static int parser_action_row1477[] = {
+static int parser_action_row1472[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1478[] = {
- 1,
- -1, 1, 60
-};
-static int parser_action_row1479[] = {
- 1,
- -1, 1, 61
-};
-static int parser_action_row1480[] = {
- 2,
- -1, 1, 149,
- 89, 0, 997
-};
-static int parser_action_row1481[] = {
+static int parser_action_row1473[] = {
2,
- -1, 1, 378,
- 9, 0, 1000
+ -1, 1, 369,
+ 9, 0, 1017
};
-static int parser_action_row1482[] = {
+static int parser_action_row1474[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1483[] = {
+static int parser_action_row1475[] = {
3,
- -1, 3, 1482,
- 31, 0, 34,
- 96, 0, 56
+ -1, 3, 1474,
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row1484[] = {
+static int parser_action_row1476[] = {
1,
- -1, 1, 65
+ -1, 1, 62
};
-static int parser_action_row1485[] = {
+static int parser_action_row1477[] = {
2,
- -1, 1, 378,
- 9, 0, 1000
+ -1, 1, 369,
+ 9, 0, 1017
};
-static int parser_action_row1486[] = {
+static int parser_action_row1478[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 458,
+ 9, 0, 466,
12, 0, 26,
15, 0, 28,
- 18, 0, 29,
- 25, 0, 30,
- 28, 0, 31,
- 29, 0, 32,
- 30, 0, 33,
- 36, 0, 35,
- 37, 0, 36,
- 38, 0, 37,
- 39, 0, 38,
- 40, 0, 39,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 45,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row1487[] = {
- 1,
- -1, 1, 94
+ 16, 0, 29,
+ 22, 0, 30,
+ 25, 0, 31,
+ 26, 0, 32,
+ 27, 0, 33,
+ 33, 0, 35,
+ 34, 0, 36,
+ 35, 0, 37,
+ 36, 0, 38,
+ 37, 0, 39,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 45,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1488[] = {
+static int parser_action_row1479[] = {
1,
-1, 1, 79
};
-static int parser_action_row1489[] = {
- 2,
- -1, 1, 378,
- 9, 0, 1000
-};
-static int parser_action_row1490[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+static int parser_action_row1480[] = {
+ 1,
+ -1, 1, 66
};
-static int parser_action_row1491[] = {
+static int parser_action_row1481[] = {
2,
- -1, 3, 1490,
- 17, 0, 1265
-};
-static int parser_action_row1492[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
-};
-static int parser_action_row1493[] = {
- 1,
- -1, 1, 76
+ -1, 1, 369,
+ 9, 0, 1017
};
-static int parser_action_row1494[] = {
+static int parser_action_row1482[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row1495[] = {
- 1,
- -1, 1, 63
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1496[] = {
- 2,
- -1, 1, 149,
- 89, 0, 997
-};
-static int parser_action_row1497[] = {
+static int parser_action_row1483[] = {
3,
- -1, 3, 1496,
- 31, 0, 34,
- 96, 0, 56
+ -1, 3, 1482,
+ 28, 0, 34,
+ 94, 0, 56
};
-static int parser_action_row1498[] = {
+static int parser_action_row1484[] = {
1,
- -1, 1, 87
-};
-static int parser_action_row1499[] = {
- 2,
- -1, 1, 135,
- 4, 0, 720
+ -1, 1, 72
};
-static int parser_action_row1500[] = {
+static int parser_action_row1485[] = {
1,
- -1, 1, 88
-};
-static int parser_action_row1501[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
-};
-static int parser_action_row1502[] = {
- 2,
- -1, 1, 70,
- 61, 0, 1533
-};
-static int parser_action_row1503[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
+ -1, 1, 73
};
-static int parser_action_row1504[] = {
+static int parser_action_row1486[] = {
1,
- -1, 1, 334
+ -1, 1, 326
};
-static int parser_action_row1505[] = {
+static int parser_action_row1487[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1506[] = {
+static int parser_action_row1488[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1507[] = {
+static int parser_action_row1489[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1508[] = {
+static int parser_action_row1490[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1509[] = {
+static int parser_action_row1491[] = {
22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 358,
+ 12, 0, 155,
+ 22, 0, 156,
+ 31, 0, 157,
+ 38, 0, 158,
+ 40, 0, 159,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 48, 0, 160,
+ 51, 0, 46,
+ 53, 0, 47,
+ 65, 0, 161,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
};
-static int parser_action_row1510[] = {
+static int parser_action_row1492[] = {
1,
- -1, 1, 681
+ -1, 1, 680
};
-static int parser_action_row1511[] = {
+static int parser_action_row1493[] = {
2,
- -1, 3, 1510,
- 52, 0, 171
+ -1, 3, 1492,
+ 49, 0, 175
};
-static int parser_action_row1512[] = {
+static int parser_action_row1494[] = {
1,
- -1, 1, 236
+ -1, 1, 220
};
-static int parser_action_row1513[] = {
+static int parser_action_row1495[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1514[] = {
+static int parser_action_row1496[] = {
2,
- -1, 3, 1513,
- 48, 0, 1542
+ -1, 3, 1495,
+ 45, 0, 1516
};
-static int parser_action_row1515[] = {
+static int parser_action_row1497[] = {
2,
- -1, 3, 1514,
- 55, 0, 1543
+ -1, 3, 1496,
+ 52, 0, 1517
};
-static int parser_action_row1516[] = {
+static int parser_action_row1498[] = {
4,
- -1, 3, 1515,
- 0, 0, 82,
- 1, 0, 83,
- 82, 0, 180
-};
-static int parser_action_row1517[] = {
- 2,
- -1, 3, 1516,
- 50, 0, 1546
+ -1, 3, 1497,
+ 0, 0, 83,
+ 1, 0, 84,
+ 80, 0, 184
};
-static int parser_action_row1518[] = {
+static int parser_action_row1499[] = {
2,
- -1, 3, 1517,
- 55, 0, 1547
+ -1, 3, 1498,
+ 47, 0, 1520
};
-static int parser_action_row1519[] = {
+static int parser_action_row1500[] = {
2,
- -1, 3, 1518,
- 55, 0, 1548
+ -1, 3, 1499,
+ 52, 0, 1521
};
-static int parser_action_row1520[] = {
+static int parser_action_row1501[] = {
2,
- -1, 1, 135,
- 4, 0, 720
+ -1, 3, 1500,
+ 52, 0, 1522
};
-static int parser_action_row1521[] = {
+static int parser_action_row1502[] = {
1,
-1, 1, 57
};
-static int parser_action_row1522[] = {
+static int parser_action_row1503[] = {
2,
- -1, 1, 378,
- 9, 0, 1000
-};
-static int parser_action_row1523[] = {
- 1,
- -1, 1, 66
+ -1, 1, 369,
+ 9, 0, 1017
};
-static int parser_action_row1524[] = {
+static int parser_action_row1504[] = {
1,
- -1, 1, 80
-};
-static int parser_action_row1525[] = {
- 2,
- -1, 1, 378,
- 9, 0, 1000
+ -1, 1, 63
};
-static int parser_action_row1526[] = {
+static int parser_action_row1505[] = {
1,
- -1, 1, 81
+ -1, 1, 67
};
-static int parser_action_row1527[] = {
+static int parser_action_row1506[] = {
2,
- -1, 1, 92,
- 14, 0, 712
-};
-static int parser_action_row1528[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 369,
+ 9, 0, 1017
};
-static int parser_action_row1529[] = {
+static int parser_action_row1507[] = {
1,
- -1, 1, 71
+ -1, 1, 68
};
-static int parser_action_row1530[] = {
+static int parser_action_row1508[] = {
2,
- -1, 1, 135,
- 4, 0, 720
+ -1, 1, 77,
+ 14, 0, 725
};
-static int parser_action_row1531[] = {
+static int parser_action_row1509[] = {
1,
- -1, 1, 89
-};
-static int parser_action_row1532[] = {
- 3,
- -1, 1, 155,
- 31, 0, 34,
- 96, 0, 56
-};
-static int parser_action_row1533[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row1534[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
-};
-static int parser_action_row1535[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
+ -1, 1, 74
};
-static int parser_action_row1536[] = {
+static int parser_action_row1510[] = {
1,
- -1, 1, 491
+ -1, 1, 483
};
-static int parser_action_row1537[] = {
+static int parser_action_row1511[] = {
1,
- -1, 1, 496
+ -1, 1, 488
};
-static int parser_action_row1538[] = {
+static int parser_action_row1512[] = {
1,
- -1, 1, 493
+ -1, 1, 485
};
-static int parser_action_row1539[] = {
+static int parser_action_row1513[] = {
1,
- -1, 1, 498
+ -1, 1, 490
};
-static int parser_action_row1540[] = {
+static int parser_action_row1514[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1541[] = {
+static int parser_action_row1515[] = {
2,
- -1, 1, 237,
- 27, 1, 679
+ -1, 1, 221,
+ 24, 1, 678
};
-static int parser_action_row1542[] = {
+static int parser_action_row1516[] = {
21,
- -1, 1, 367,
- 12, 0, 802,
- 25, 0, 803,
- 34, 0, 804,
- 41, 0, 805,
- 43, 0, 806,
- 45, 0, 807,
- 46, 0, 808,
- 47, 0, 809,
- 48, 0, 810,
- 51, 0, 811,
- 54, 0, 812,
- 68, 0, 813,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 814,
- 87, 0, 815,
- 88, 0, 816,
- 89, 0, 817,
- 90, 0, 54,
- 93, 0, 818
-};
-static int parser_action_row1543[] = {
- 3,
- -1, 1, 385,
- 0, 0, 1,
- 1, 0, 2
-};
-static int parser_action_row1544[] = {
- 1,
- -1, 1, 456
-};
-static int parser_action_row1545[] = {
- 3,
- -1, 3, 1544,
- 0, 0, 82,
- 1, 0, 83
+ -1, 1, 358,
+ 12, 0, 816,
+ 22, 0, 817,
+ 31, 0, 818,
+ 38, 0, 819,
+ 40, 0, 820,
+ 42, 0, 821,
+ 43, 0, 822,
+ 44, 0, 823,
+ 45, 0, 824,
+ 48, 0, 825,
+ 51, 0, 826,
+ 65, 0, 827,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 828,
+ 85, 0, 829,
+ 86, 0, 830,
+ 87, 0, 831,
+ 88, 0, 54,
+ 91, 0, 832
};
-static int parser_action_row1546[] = {
- 1,
- -1, 1, 328
-};
-static int parser_action_row1547[] = {
+static int parser_action_row1517[] = {
3,
- -1, 1, 385,
+ -1, 1, 376,
0, 0, 1,
1, 0, 2
};
-static int parser_action_row1548[] = {
- 1,
- -1, 1, 145
-};
-static int parser_action_row1549[] = {
- 1,
- -1, 1, 143
-};
-static int parser_action_row1550[] = {
- 3,
- -1, 1, 155,
- 31, 0, 34,
- 96, 0, 56
-};
-static int parser_action_row1551[] = {
+static int parser_action_row1518[] = {
1,
- -1, 1, 58
+ -1, 1, 437
};
-static int parser_action_row1552[] = {
- 1,
- -1, 1, 82
+static int parser_action_row1519[] = {
+ 3,
+ -1, 3, 1518,
+ 0, 0, 83,
+ 1, 0, 84
};
-static int parser_action_row1553[] = {
+static int parser_action_row1520[] = {
1,
- -1, 1, 77
-};
-static int parser_action_row1554[] = {
- 2,
- -1, 1, 92,
- 14, 0, 712
+ -1, 1, 320
};
-static int parser_action_row1555[] = {
+static int parser_action_row1521[] = {
3,
- -1, 1, 155,
- 31, 0, 34,
- 96, 0, 56
+ -1, 1, 376,
+ 0, 0, 1,
+ 1, 0, 2
};
-static int parser_action_row1556[] = {
+static int parser_action_row1522[] = {
1,
- -1, 1, 84
+ -1, 1, 129
};
-static int parser_action_row1557[] = {
+static int parser_action_row1523[] = {
1,
- -1, 1, 72
+ -1, 1, 127
};
-static int parser_action_row1558[] = {
- 22,
- -1, 1, 367,
- 12, 0, 152,
- 25, 0, 153,
- 34, 0, 154,
- 41, 0, 155,
- 43, 0, 156,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 51, 0, 157,
- 54, 0, 46,
- 56, 0, 47,
- 68, 0, 158,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row1559[] = {
+static int parser_action_row1524[] = {
1,
- -1, 1, 73
-};
-static int parser_action_row1560[] = {
- 2,
- -1, 3, 1559,
- 15, 0, 1568
+ -1, 1, 58
};
-static int parser_action_row1561[] = {
+static int parser_action_row1525[] = {
1,
- -1, 1, 404
-};
-static int parser_action_row1562[] = {
- 2,
- -1, 3, 1561,
- 55, 0, 1569
+ -1, 1, 69
};
-static int parser_action_row1563[] = {
+static int parser_action_row1526[] = {
1,
- -1, 1, 329
+ -1, 1, 65
};
-static int parser_action_row1564[] = {
+static int parser_action_row1527[] = {
2,
- -1, 3, 1563,
- 55, 0, 1570
+ -1, 3, 1526,
+ 15, 0, 1531
};
-static int parser_action_row1565[] = {
+static int parser_action_row1528[] = {
1,
- -1, 1, 64
+ -1, 1, 393
};
-static int parser_action_row1566[] = {
- 1,
- -1, 1, 78
+static int parser_action_row1529[] = {
+ 2,
+ -1, 3, 1528,
+ 52, 0, 1532
};
-static int parser_action_row1567[] = {
+static int parser_action_row1530[] = {
1,
- -1, 1, 85
+ -1, 1, 321
};
-static int parser_action_row1568[] = {
- 1,
- -1, 1, 74
+static int parser_action_row1531[] = {
+ 2,
+ -1, 3, 1530,
+ 52, 0, 1533
};
-static int parser_action_row1569[] = {
+static int parser_action_row1532[] = {
32,
- -1, 1, 367,
+ -1, 1, 358,
0, 0, 1,
1, 0, 2,
- 9, 0, 749,
- 12, 0, 650,
- 15, 0, 651,
- 18, 0, 652,
- 25, 0, 653,
- 28, 0, 655,
- 29, 0, 656,
- 30, 0, 657,
- 36, 0, 658,
- 37, 0, 659,
- 38, 0, 660,
- 39, 0, 661,
- 40, 0, 662,
- 41, 0, 40,
- 45, 0, 41,
- 46, 0, 42,
- 47, 0, 43,
- 48, 0, 44,
- 53, 0, 663,
- 54, 0, 46,
- 56, 0, 47,
- 83, 0, 48,
- 84, 0, 49,
- 86, 0, 50,
- 87, 0, 51,
- 88, 0, 52,
- 89, 0, 53,
- 90, 0, 54,
- 93, 0, 55
-};
-static int parser_action_row1570[] = {
- 1,
- -1, 1, 457
-};
-static int parser_action_row1571[] = {
+ 9, 0, 762,
+ 12, 0, 662,
+ 15, 0, 663,
+ 16, 0, 664,
+ 22, 0, 665,
+ 25, 0, 667,
+ 26, 0, 668,
+ 27, 0, 669,
+ 33, 0, 670,
+ 34, 0, 671,
+ 35, 0, 672,
+ 36, 0, 673,
+ 37, 0, 674,
+ 38, 0, 40,
+ 42, 0, 41,
+ 43, 0, 42,
+ 44, 0, 43,
+ 45, 0, 44,
+ 50, 0, 675,
+ 51, 0, 46,
+ 53, 0, 47,
+ 81, 0, 48,
+ 82, 0, 49,
+ 84, 0, 50,
+ 85, 0, 51,
+ 86, 0, 52,
+ 87, 0, 53,
+ 88, 0, 54,
+ 91, 0, 55
+};
+static int parser_action_row1533[] = {
1,
- -1, 1, 147
+ -1, 1, 438
};
-static int parser_action_row1572[] = {
+static int parser_action_row1534[] = {
1,
- -1, 1, 680
+ -1, 1, 131
+};
+static int parser_action_row1535[] = {
+ 1,
+ -1, 1, 679
};
-static int parser_action_row1573[] = {
+static int parser_action_row1536[] = {
2,
- -1, 3, 1572,
- 52, 0, 171
+ -1, 3, 1535,
+ 49, 0, 175
};
-static int parser_action_row1574[] = {
+static int parser_action_row1537[] = {
2,
- -1, 1, 236,
- 27, 1, 678
+ -1, 1, 220,
+ 24, 1, 677
};
const int* const parser_action_table[] = {
parser_action_row1534,
parser_action_row1535,
parser_action_row1536,
- parser_action_row1537,
- parser_action_row1538,
- parser_action_row1539,
- parser_action_row1540,
- parser_action_row1541,
- parser_action_row1542,
- parser_action_row1543,
- parser_action_row1544,
- parser_action_row1545,
- parser_action_row1546,
- parser_action_row1547,
- parser_action_row1548,
- parser_action_row1549,
- parser_action_row1550,
- parser_action_row1551,
- parser_action_row1552,
- parser_action_row1553,
- parser_action_row1554,
- parser_action_row1555,
- parser_action_row1556,
- parser_action_row1557,
- parser_action_row1558,
- parser_action_row1559,
- parser_action_row1560,
- parser_action_row1561,
- parser_action_row1562,
- parser_action_row1563,
- parser_action_row1564,
- parser_action_row1565,
- parser_action_row1566,
- parser_action_row1567,
- parser_action_row1568,
- parser_action_row1569,
- parser_action_row1570,
- parser_action_row1571,
- parser_action_row1572,
- parser_action_row1573,
- parser_action_row1574
+ parser_action_row1537
};
static int parser_goto_row1[] = {
static int parser_goto_row3[] = {
3,
-1, 5,
- 16, 85,
- 23, 85
+ 16, 86,
+ 23, 86
};
static int parser_goto_row4[] = {
9,
-1, 6,
- 18, 93,
- 25, 93,
- 88, 93,
- 92, 93,
- 102, 93,
- 104, 93,
- 229, 93,
- 235, 93
+ 18, 94,
+ 25, 94,
+ 89, 94,
+ 93, 94,
+ 103, 94,
+ 105, 94,
+ 233, 94,
+ 239, 94
};
static int parser_goto_row5[] = {
16,
-1, 7,
4, 21,
- 16, 86,
- 17, 89,
- 18, 94,
- 23, 100,
- 24, 103,
- 25, 105,
- 87, 228,
- 88, 230,
- 92, 232,
- 101, 234,
- 102, 236,
- 104, 237,
- 229, 384,
- 235, 386
+ 16, 87,
+ 17, 90,
+ 18, 95,
+ 23, 101,
+ 24, 104,
+ 25, 106,
+ 88, 232,
+ 89, 234,
+ 93, 236,
+ 102, 238,
+ 103, 240,
+ 105, 241,
+ 233, 390,
+ 239, 392
};
static int parser_goto_row6[] = {
1,
-1, 9
};
static int parser_goto_row8[] = {
- 21,
- -1, 1013,
+ 14,
+ -1, 1031,
12, 57,
- 22, 99,
- 91, 231,
- 95, 231,
- 180, 336,
- 463, 589,
- 467, 336,
- 694, 336,
- 712, 336,
- 721, 336,
- 795, 336,
- 981, 1110,
- 1014, 1138,
- 1015, 1140,
- 1139, 1269,
- 1394, 336,
- 1397, 1445,
- 1400, 336,
- 1432, 336,
- 1449, 336
+ 22, 100,
+ 92, 235,
+ 96, 235,
+ 184, 342,
+ 471, 600,
+ 475, 603,
+ 706, 603,
+ 725, 603,
+ 734, 603,
+ 810, 603,
+ 1000, 1128,
+ 1401, 603
};
static int parser_goto_row9[] = {
1,
- -1, 358
+ -1, 364
};
static int parser_goto_row10[] = {
1,
- -1, 728
+ -1, 741
};
static int parser_goto_row11[] = {
2,
- -1, 1129,
- 1131, 1255
+ -1, 1146,
+ 1148, 1269
};
static int parser_goto_row12[] = {
2,
- -1, 1005,
- 1253, 1332
+ -1, 1022,
+ 1267, 1342
};
static int parser_goto_row13[] = {
5,
- -1, 852,
- 858, 1017,
- 1008, 1017,
- 1025, 1017,
- 1168, 1017
+ -1, 866,
+ 872, 1033,
+ 1025, 1033,
+ 1041, 1033,
+ 1182, 1033
};
static int parser_goto_row14[] = {
9,
- -1, 853,
- 859, 1020,
- 1009, 1020,
- 1019, 1020,
- 1026, 1020,
- 1134, 1020,
- 1169, 1020,
- 1172, 1020,
- 1286, 1020
+ -1, 867,
+ 873, 1036,
+ 1026, 1036,
+ 1035, 1036,
+ 1042, 1036,
+ 1151, 1036,
+ 1183, 1036,
+ 1186, 1036,
+ 1295, 1036
};
static int parser_goto_row15[] = {
1,
- -1, 854
+ -1, 868
};
static int parser_goto_row16[] = {
- 8,
- -1, 713,
- 612, 716,
- 1260, 1335,
- 1392, 1437,
- 1397, 1446,
- 1447, 1492,
- 1526, 1552,
- 1553, 1565
+ 6,
+ -1, 726,
+ 624, 729,
+ 1274, 1345,
+ 1399, 1440,
+ 1404, 1448,
+ 1507, 1525
};
static int parser_goto_row17[] = {
6,
- -1, 723,
- 1339, 1396,
- 1343, 1401,
- 1391, 1434,
- 1393, 1439,
- 1399, 1450
+ -1, 736,
+ 1349, 1403,
+ 1352, 1406,
+ 1398, 1437,
+ 1400, 1442,
+ 1405, 1449
};
static int parser_goto_row18[] = {
- 1,
- -1, 1014
+ 8,
+ -1, 204,
+ 100, 237,
+ 235, 391,
+ 342, 476,
+ 600, 707,
+ 603, 711,
+ 1031, 1154,
+ 1128, 1258
};
static int parser_goto_row19[] = {
- 3,
- -1, 1015,
- 1014, 1139,
- 1397, 1447
+ 6,
+ -1, 1011,
+ 362, 504,
+ 1140, 1265,
+ 1275, 1346,
+ 1277, 1348,
+ 1279, 1351
};
static int parser_goto_row20[] = {
- 11,
- -1, 200,
- 99, 233,
- 231, 385,
- 336, 468,
- 589, 695,
- 1013, 1137,
- 1110, 1242,
- 1138, 1268,
- 1140, 1270,
- 1269, 1345,
- 1445, 1490
+ 6,
+ -1, 629,
+ 1277, 1349,
+ 1279, 1352,
+ 1346, 1398,
+ 1348, 1400,
+ 1351, 1405
};
static int parser_goto_row21[] = {
- 6,
- -1, 992,
- 356, 495,
- 1122, 1249,
- 1261, 1336,
- 1263, 1338,
- 1267, 1342
+ 1,
+ -1, 855
};
static int parser_goto_row22[] = {
- 6,
- -1, 617,
- 1263, 1339,
- 1267, 1343,
- 1336, 1391,
- 1338, 1393,
- 1342, 1399
+ 2,
+ -1, 1007,
+ 1009, 1135
};
static int parser_goto_row23[] = {
- 1,
- -1, 839
+ 2,
+ -1, 856,
+ 1134, 1261
};
static int parser_goto_row24[] = {
- 2,
- -1, 988,
- 990, 1117
+ 8,
+ -1, 737,
+ 736, 863,
+ 1352, 1407,
+ 1398, 1438,
+ 1405, 1450,
+ 1406, 1452,
+ 1437, 1474,
+ 1449, 1482
};
static int parser_goto_row25[] = {
2,
- -1, 840,
- 1116, 1245
+ -1, 1138,
+ 1139, 1263
};
static int parser_goto_row26[] = {
- 12,
- -1, 724,
- 723, 849,
- 998, 1123,
- 1343, 1402,
- 1391, 1435,
- 1399, 1451,
- 1401, 1454,
- 1434, 1482,
- 1450, 1496,
- 1498, 1531,
- 1519, 1549,
- 1529, 1554
+ 2,
+ -1, 1012,
+ 1262, 1340
};
static int parser_goto_row27[] = {
- 2,
- -1, 1120,
- 1121, 1247
+ 1,
+ -1, 1013
};
static int parser_goto_row28[] = {
- 2,
- -1, 993,
- 1246, 1330
+ 1,
+ -1, 1014
};
static int parser_goto_row29[] = {
1,
- -1, 994
+ -1, -1
};
static int parser_goto_row30[] = {
1,
- -1, 995
+ -1, 58
};
static int parser_goto_row31[] = {
- 4,
- -1, 998,
- 1453, 1498,
- 1479, 1519,
- 1495, 1529
+ 11,
+ -1, 59,
+ 737, 864,
+ 741, 869,
+ 863, 1020,
+ 874, 1038,
+ 1407, 1453,
+ 1438, 1475,
+ 1450, 1483,
+ 1452, 1484,
+ 1474, 1503,
+ 1482, 1508
};
static int parser_goto_row32[] = {
1,
- -1, 58
+ -1, -1
};
static int parser_goto_row33[] = {
- 14,
- -1, 1250,
- 12, 59,
- 22, 59,
- 91, 59,
- 724, 850,
- 728, 855,
- 849, 1003,
- 860, 1022,
- 1402, 1455,
- 1435, 1483,
- 1451, 1497,
- 1454, 1499,
- 1482, 1522,
- 1496, 1530
-};
-static int parser_goto_row34[] = {
- 4,
- -1, 1251,
- 1531, 1555,
- 1549, 1564,
- 1554, 1566
-};
-static int parser_goto_row35[] = {
5,
-1, 10,
- 17, 90,
- 24, 90,
- 87, 90,
- 101, 90
+ 17, 91,
+ 24, 91,
+ 88, 91,
+ 102, 91
};
-static int parser_goto_row36[] = {
+static int parser_goto_row34[] = {
24,
- -1, 692,
- 186, 340,
- 406, 530,
- 422, 549,
- 443, 566,
- 719, 841,
- 766, 885,
- 798, 916,
- 842, 996,
- 863, 1029,
- 872, 1033,
- 904, 1061,
- 1016, 1147,
- 1067, 1201,
- 1136, 1260,
- 1204, 916,
- 1246, 996,
- 1274, 1347,
- 1275, 916,
- 1329, 1147,
- 1331, 1390,
- 1426, 1471,
- 1427, 916,
- 1431, 1476
+ -1, 934,
+ 190, 346,
+ 412, 539,
+ 429, 559,
+ 450, 576,
+ 598, 704,
+ 612, 704,
+ 703, 704,
+ 718, 704,
+ 732, 857,
+ 779, 899,
+ 858, 1015,
+ 877, 1045,
+ 886, 1049,
+ 918, 1077,
+ 1032, 1161,
+ 1084, 1216,
+ 1153, 1274,
+ 1262, 1015,
+ 1283, 1353,
+ 1339, 1161,
+ 1341, 1397,
+ 1430, 1466,
+ 1435, 1471
};
-static int parser_goto_row37[] = {
+static int parser_goto_row35[] = {
4,
- -1, 693,
- 600, 706,
- 691, 786,
- 705, 799
+ -1, 705,
+ 612, 719,
+ 703, 799,
+ 718, 813
};
-static int parser_goto_row38[] = {
+static int parser_goto_row36[] = {
2,
- -1, 788,
- 789, 905
+ -1, 801,
+ 802, 919
};
-static int parser_goto_row39[] = {
+static int parser_goto_row37[] = {
5,
- -1, 618,
- 838, 983,
- 984, 1113,
- 986, 1114,
- 1337, 1392
+ -1, 630,
+ 854, 1002,
+ 1003, 1131,
+ 1005, 1132,
+ 1347, 1399
};
-static int parser_goto_row40[] = {
- 11,
- -1, 288,
- 289, 424,
- 754, 876,
- 877, 1035,
- 1004, 1126,
- 1127, 1252,
- 1340, 1397,
- 1341, 1398,
- 1403, 1456,
- 1405, 1458,
- 1457, 1501
+static int parser_goto_row38[] = {
+ 7,
+ -1, 293,
+ 294, 431,
+ 767, 890,
+ 891, 1051,
+ 1021, 1143,
+ 1144, 1266,
+ 1350, 1404
};
-static int parser_goto_row41[] = {
+static int parser_goto_row39[] = {
24,
- -1, 140,
- 32, 148,
- 331, 459,
- 457, 582,
- 553, 681,
- 654, 756,
- 656, 148,
- 722, 847,
- 777, 897,
- 848, 1002,
- 884, 459,
- 1040, 582,
- 1058, 1197,
- 1182, 681,
- 1364, 897,
- 1395, 1442,
- 1422, 1466,
- 1433, 1480,
- 1438, 1484,
- 1443, 1488,
- 1465, 1197,
- 1481, 1521,
- 1485, 1524,
- 1568, 1466
+ -1, 143,
+ 32, 151,
+ 337, 467,
+ 465, 593,
+ 563, 693,
+ 666, 769,
+ 668, 151,
+ 735, 861,
+ 790, 911,
+ 862, 1019,
+ 898, 467,
+ 1056, 593,
+ 1074, 1211,
+ 1196, 693,
+ 1370, 911,
+ 1402, 1445,
+ 1425, 1461,
+ 1436, 1472,
+ 1441, 1476,
+ 1446, 1480,
+ 1460, 1211,
+ 1473, 1502,
+ 1477, 1505,
+ 1531, 1461
};
-static int parser_goto_row42[] = {
+static int parser_goto_row40[] = {
1,
-1, 60
};
-static int parser_goto_row43[] = {
+static int parser_goto_row41[] = {
2,
-1, 61,
- 670, 774
+ 682, 787
};
-static int parser_goto_row44[] = {
+static int parser_goto_row42[] = {
4,
- -1, 284,
- 460, 584,
- 750, 874,
- 1042, 1187
+ -1, 289,
+ 468, 595,
+ 763, 888,
+ 1058, 1201
};
-static int parser_goto_row45[] = {
+static int parser_goto_row43[] = {
4,
- -1, 202,
- 204, 360,
- 421, 360,
- 896, 360
+ -1, 206,
+ 208, 366,
+ 428, 366,
+ 910, 366
};
-static int parser_goto_row46[] = {
+static int parser_goto_row44[] = {
16,
- -1, 141,
+ -1, 144,
12, 62,
22, 62,
- 91, 62,
- 95, 62,
- 142, 285,
- 203, 359,
- 361, 359,
- 420, 359,
- 460, 285,
- 548, 359,
- 552, 664,
- 670, 775,
- 750, 285,
- 1042, 285,
- 1181, 664
+ 92, 62,
+ 96, 62,
+ 145, 290,
+ 207, 365,
+ 367, 365,
+ 427, 365,
+ 468, 290,
+ 558, 365,
+ 562, 676,
+ 682, 788,
+ 763, 290,
+ 1058, 290,
+ 1195, 676
};
-static int parser_goto_row47[] = {
+static int parser_goto_row45[] = {
18,
- -1, 172,
- 37, 173,
- 143, 286,
- 149, 292,
- 659, 762,
- 660, 763,
- 682, 780,
- 753, 875,
- 759, 880,
- 911, 1065,
- 912, 1066,
- 1142, 1272,
- 1143, 1273,
- 1198, 1311,
- 1300, 1365,
- 1467, 1511,
- 1510, 1540,
- 1572, 1573
+ -1, 176,
+ 37, 177,
+ 146, 291,
+ 152, 297,
+ 671, 775,
+ 672, 776,
+ 694, 793,
+ 766, 889,
+ 772, 894,
+ 929, 1082,
+ 930, 1083,
+ 1156, 1281,
+ 1157, 1282,
+ 1212, 1320,
+ 1309, 1371,
+ 1462, 1493,
+ 1492, 1514,
+ 1535, 1536
};
-static int parser_goto_row48[] = {
- 7,
+static int parser_goto_row46[] = {
+ 8,
-1, 63,
- 798, 917,
- 1016, 1148,
- 1204, 917,
- 1275, 917,
- 1329, 1148,
- 1427, 917
+ 812, 935,
+ 1032, 1162,
+ 1080, 935,
+ 1219, 935,
+ 1284, 935,
+ 1339, 1162,
+ 1431, 935
};
-static int parser_goto_row49[] = {
- 5,
+static int parser_goto_row47[] = {
+ 6,
-1, 64,
- 798, 918,
- 1204, 918,
- 1275, 918,
- 1427, 918
+ 812, 936,
+ 1080, 936,
+ 1219, 936,
+ 1284, 936,
+ 1431, 936
};
-static int parser_goto_row50[] = {
+static int parser_goto_row48[] = {
15,
- -1, 367,
- 218, 376,
- 219, 378,
- 628, 735,
- 629, 737,
- 768, 888,
- 770, 891,
- 771, 893,
- 1190, 1304,
- 1191, 1306,
- 1277, 1350,
- 1278, 1352,
- 1280, 1355,
- 1462, 1505,
- 1463, 1507
+ -1, 373,
+ 222, 382,
+ 223, 384,
+ 640, 748,
+ 641, 750,
+ 781, 902,
+ 783, 905,
+ 784, 907,
+ 1204, 1313,
+ 1205, 1315,
+ 1286, 1356,
+ 1287, 1358,
+ 1289, 1361,
+ 1457, 1487,
+ 1458, 1489
};
-static int parser_goto_row51[] = {
- 7,
+static int parser_goto_row49[] = {
+ 8,
-1, 65,
- 798, 919,
- 1016, 1149,
- 1204, 919,
- 1275, 919,
- 1329, 1149,
- 1427, 919
+ 812, 937,
+ 1032, 1163,
+ 1080, 937,
+ 1219, 937,
+ 1284, 937,
+ 1339, 1163,
+ 1431, 937
};
-static int parser_goto_row52[] = {
+static int parser_goto_row50[] = {
1,
-1, 66
};
-static int parser_goto_row53[] = {
+static int parser_goto_row51[] = {
3,
- -1, 665,
- 670, 776,
- 774, 895
+ -1, 677,
+ 682, 789,
+ 787, 909
};
-static int parser_goto_row54[] = {
- 7,
+static int parser_goto_row52[] = {
+ 8,
-1, 67,
- 798, 920,
- 1016, 1150,
- 1204, 920,
- 1275, 920,
- 1329, 1150,
- 1427, 920
+ 812, 938,
+ 1032, 1164,
+ 1080, 938,
+ 1219, 938,
+ 1284, 938,
+ 1339, 1164,
+ 1431, 938
};
-static int parser_goto_row55[] = {
- 7,
+static int parser_goto_row53[] = {
+ 8,
-1, 68,
- 798, 921,
- 1016, 1151,
- 1204, 921,
- 1275, 921,
- 1329, 1151,
- 1427, 921
+ 812, 939,
+ 1032, 1165,
+ 1080, 939,
+ 1219, 939,
+ 1284, 939,
+ 1339, 1165,
+ 1431, 939
};
-static int parser_goto_row56[] = {
- 7,
+static int parser_goto_row54[] = {
+ 8,
-1, 69,
- 798, 922,
- 1016, 1152,
- 1204, 922,
- 1275, 922,
- 1329, 1152,
- 1427, 922
+ 812, 940,
+ 1032, 1166,
+ 1080, 940,
+ 1219, 940,
+ 1284, 940,
+ 1339, 1166,
+ 1431, 940
};
-static int parser_goto_row57[] = {
- 7,
+static int parser_goto_row55[] = {
+ 8,
-1, 70,
- 798, 923,
- 1016, 1153,
- 1204, 923,
- 1275, 923,
- 1329, 1153,
- 1427, 923
+ 812, 941,
+ 1032, 1167,
+ 1080, 941,
+ 1219, 941,
+ 1284, 941,
+ 1339, 1167,
+ 1431, 941
};
-static int parser_goto_row58[] = {
+static int parser_goto_row56[] = {
2,
- -1, 175,
- 662, 764
+ -1, 179,
+ 674, 777
};
-static int parser_goto_row59[] = {
+static int parser_goto_row57[] = {
45,
- -1, 159,
- 39, 176,
- 175, 329,
- 364, 504,
- 367, 505,
- 375, 509,
- 376, 510,
- 377, 511,
- 378, 512,
- 472, 601,
- 550, 647,
- 648, 747,
- 662, 176,
- 734, 864,
- 735, 865,
- 736, 866,
- 737, 867,
- 764, 329,
- 887, 504,
- 888, 505,
- 890, 509,
- 891, 510,
- 892, 511,
- 893, 512,
- 910, 1064,
- 1044, 601,
- 1141, 1271,
- 1179, 647,
- 1297, 747,
- 1303, 864,
- 1304, 865,
- 1305, 866,
- 1306, 867,
- 1313, 1375,
- 1349, 1408,
- 1350, 1409,
- 1351, 1410,
- 1352, 1411,
- 1354, 1414,
- 1355, 1415,
- 1406, 1459,
- 1504, 1535,
- 1505, 1536,
- 1506, 1537,
- 1507, 1538
+ -1, 162,
+ 39, 180,
+ 179, 335,
+ 370, 513,
+ 373, 514,
+ 381, 518,
+ 382, 519,
+ 383, 520,
+ 384, 521,
+ 480, 613,
+ 560, 659,
+ 660, 760,
+ 674, 180,
+ 747, 878,
+ 748, 879,
+ 749, 880,
+ 750, 881,
+ 777, 335,
+ 901, 513,
+ 902, 514,
+ 904, 518,
+ 905, 519,
+ 906, 520,
+ 907, 521,
+ 928, 1081,
+ 1060, 613,
+ 1155, 1280,
+ 1193, 659,
+ 1306, 760,
+ 1312, 878,
+ 1313, 879,
+ 1314, 880,
+ 1315, 881,
+ 1323, 1382,
+ 1355, 1411,
+ 1356, 1412,
+ 1357, 1413,
+ 1358, 1414,
+ 1360, 1417,
+ 1361, 1418,
+ 1409, 1454,
+ 1486, 1509,
+ 1487, 1510,
+ 1488, 1511,
+ 1489, 1512
+};
+static int parser_goto_row58[] = {
+ 50,
+ -1, 163,
+ 39, 181,
+ 149, 295,
+ 150, 296,
+ 179, 181,
+ 191, 347,
+ 192, 348,
+ 219, 378,
+ 244, 394,
+ 255, 402,
+ 302, 437,
+ 368, 402,
+ 374, 515,
+ 393, 402,
+ 522, 402,
+ 670, 181,
+ 674, 181,
+ 696, 795,
+ 721, 815,
+ 755, 883,
+ 768, 892,
+ 770, 893,
+ 777, 181,
+ 797, 916,
+ 812, 942,
+ 901, 181,
+ 902, 181,
+ 904, 181,
+ 905, 181,
+ 906, 181,
+ 907, 181,
+ 954, 1092,
+ 965, 1101,
+ 1060, 181,
+ 1080, 942,
+ 1193, 181,
+ 1210, 1319,
+ 1219, 942,
+ 1284, 942,
+ 1306, 181,
+ 1311, 1373,
+ 1312, 181,
+ 1313, 181,
+ 1314, 181,
+ 1315, 181,
+ 1321, 1380,
+ 1383, 1427,
+ 1431, 942,
+ 1481, 1507,
+ 1490, 1513
+};
+static int parser_goto_row59[] = {
+ 1,
+ -1, 164
};
static int parser_goto_row60[] = {
- 54,
- -1, 160,
- 39, 177,
- 146, 290,
- 147, 291,
- 175, 177,
- 187, 341,
- 188, 342,
- 215, 372,
- 240, 388,
- 251, 396,
- 297, 430,
- 362, 396,
- 368, 506,
- 387, 396,
- 513, 396,
- 658, 177,
- 662, 177,
- 684, 782,
- 708, 801,
- 742, 869,
- 755, 878,
- 757, 879,
- 764, 177,
- 784, 902,
- 798, 924,
- 887, 177,
- 888, 177,
- 890, 177,
- 891, 177,
- 892, 177,
- 893, 177,
- 936, 1075,
- 947, 1084,
- 1044, 177,
- 1179, 177,
- 1196, 1310,
- 1204, 924,
- 1275, 924,
- 1297, 177,
- 1302, 1367,
- 1303, 177,
- 1304, 177,
- 1305, 177,
- 1306, 177,
- 1312, 1374,
- 1376, 1423,
- 1427, 924,
- 1489, 1526,
- 1493, 1528,
- 1508, 1539,
- 1527, 1553,
- 1532, 1556,
- 1534, 1558,
- 1557, 1567
+ 6,
+ -1, 165,
+ 303, 438,
+ 444, 570,
+ 446, 572,
+ 447, 573,
+ 571, 700
};
static int parser_goto_row61[] = {
1,
- -1, 161
+ -1, 166
};
static int parser_goto_row62[] = {
- 6,
- -1, 162,
- 298, 431,
- 437, 560,
- 439, 562,
- 440, 563,
- 561, 688
+ 10,
+ -1, 167,
+ 448, 574,
+ 449, 575,
+ 453, 579,
+ 454, 580,
+ 455, 581,
+ 456, 582,
+ 457, 583,
+ 458, 584,
+ 459, 585
};
static int parser_goto_row63[] = {
- 1,
- -1, 163
+ 3,
+ -1, 168,
+ 451, 577,
+ 452, 578
};
static int parser_goto_row64[] = {
- 10,
- -1, 164,
- 441, 564,
- 442, 565,
- 446, 569,
- 447, 570,
- 448, 571,
- 449, 572,
- 450, 573,
- 451, 574,
- 452, 575
+ 5,
+ -1, 169,
+ 460, 586,
+ 461, 587,
+ 462, 588,
+ 463, 589
};
static int parser_goto_row65[] = {
3,
- -1, 165,
- 444, 567,
- 445, 568
+ -1, 170,
+ 305, 440,
+ 308, 443
};
static int parser_goto_row66[] = {
- 6,
- -1, 166,
- 300, 433,
- 303, 436,
- 453, 576,
- 454, 577,
- 455, 578
-};
-static int parser_goto_row67[] = {
1,
- -1, 167
+ -1, 171
};
-static int parser_goto_row68[] = {
- 46,
- -1, 168,
+static int parser_goto_row67[] = {
+ 47,
+ -1, 172,
12, 71,
22, 71,
28, 71,
32, 71,
- 91, 71,
- 95, 71,
- 142, 71,
- 157, 301,
- 203, 71,
- 331, 71,
- 361, 71,
- 420, 71,
- 457, 71,
- 460, 71,
- 548, 71,
- 552, 666,
- 553, 71,
- 651, 666,
- 654, 71,
- 656, 666,
- 670, 71,
- 722, 71,
- 750, 71,
- 777, 71,
- 798, 925,
- 848, 71,
- 884, 666,
- 1040, 666,
- 1042, 71,
+ 92, 71,
+ 96, 71,
+ 145, 71,
+ 160, 306,
+ 207, 71,
+ 337, 71,
+ 367, 71,
+ 427, 71,
+ 465, 71,
+ 468, 71,
+ 558, 71,
+ 562, 678,
+ 563, 71,
+ 663, 678,
+ 666, 71,
+ 668, 678,
+ 682, 71,
+ 735, 71,
+ 763, 71,
+ 790, 71,
+ 812, 943,
+ 862, 71,
+ 898, 678,
+ 1056, 678,
1058, 71,
- 1181, 666,
- 1182, 666,
- 1204, 925,
- 1275, 925,
- 1364, 666,
- 1395, 71,
- 1422, 71,
- 1427, 925,
- 1433, 71,
- 1438, 71,
- 1443, 71,
- 1465, 666,
- 1481, 71,
- 1485, 71,
- 1568, 666
+ 1074, 71,
+ 1080, 943,
+ 1195, 678,
+ 1196, 678,
+ 1219, 943,
+ 1284, 943,
+ 1370, 678,
+ 1402, 71,
+ 1425, 71,
+ 1431, 943,
+ 1436, 71,
+ 1441, 71,
+ 1446, 71,
+ 1460, 678,
+ 1473, 71,
+ 1477, 71,
+ 1531, 678
+};
+static int parser_goto_row68[] = {
+ 1,
+ -1, 72
};
static int parser_goto_row69[] = {
- 72,
- -1, 72,
- 26, 123,
- 77, 123,
- 115, 123,
- 217, 123,
- 221, 123,
- 223, 123,
- 241, 123,
- 243, 123,
- 252, 123,
- 382, 123,
- 400, 123,
- 402, 123,
- 403, 123,
- 404, 123,
- 405, 123,
- 407, 123,
- 408, 123,
- 409, 123,
- 410, 123,
- 411, 123,
- 412, 123,
- 413, 123,
- 414, 123,
- 415, 123,
- 416, 123,
- 417, 123,
- 418, 123,
- 498, 123,
- 501, 123,
- 525, 123,
- 631, 123,
- 632, 123,
- 650, 123,
- 668, 123,
- 709, 819,
- 740, 123,
- 769, 123,
- 773, 123,
- 778, 123,
- 811, 819,
- 899, 123,
- 937, 819,
- 939, 819,
- 948, 819,
- 1016, 123,
- 1045, 123,
- 1047, 123,
- 1089, 819,
- 1091, 819,
- 1092, 819,
- 1093, 819,
- 1094, 819,
- 1096, 819,
- 1097, 819,
- 1098, 819,
- 1099, 819,
- 1100, 819,
- 1101, 819,
- 1102, 819,
- 1103, 819,
- 1104, 819,
- 1105, 819,
- 1106, 819,
- 1107, 819,
- 1193, 123,
- 1194, 123,
- 1218, 819,
- 1293, 123,
- 1309, 123,
- 1329, 123,
- 1541, 819
+ 75,
+ -1, 73,
+ 26, 124,
+ 78, 124,
+ 116, 124,
+ 221, 124,
+ 225, 124,
+ 227, 124,
+ 245, 124,
+ 247, 124,
+ 256, 124,
+ 388, 124,
+ 406, 124,
+ 408, 124,
+ 409, 124,
+ 410, 124,
+ 411, 124,
+ 413, 124,
+ 414, 124,
+ 415, 124,
+ 416, 124,
+ 417, 124,
+ 418, 124,
+ 419, 124,
+ 420, 124,
+ 421, 124,
+ 422, 124,
+ 423, 124,
+ 424, 124,
+ 425, 124,
+ 507, 124,
+ 510, 124,
+ 534, 124,
+ 643, 124,
+ 644, 124,
+ 662, 124,
+ 680, 124,
+ 722, 833,
+ 753, 124,
+ 782, 124,
+ 786, 124,
+ 791, 124,
+ 808, 124,
+ 825, 833,
+ 913, 124,
+ 955, 833,
+ 957, 833,
+ 966, 833,
+ 1032, 124,
+ 1061, 124,
+ 1063, 124,
+ 1106, 833,
+ 1108, 833,
+ 1109, 833,
+ 1110, 833,
+ 1111, 833,
+ 1113, 833,
+ 1114, 833,
+ 1115, 833,
+ 1116, 833,
+ 1117, 833,
+ 1118, 833,
+ 1119, 833,
+ 1120, 833,
+ 1121, 833,
+ 1122, 833,
+ 1123, 833,
+ 1124, 833,
+ 1125, 833,
+ 1207, 124,
+ 1208, 124,
+ 1233, 833,
+ 1302, 124,
+ 1318, 124,
+ 1339, 124,
+ 1515, 833
};
static int parser_goto_row70[] = {
1,
- -1, 73
+ -1, 74
};
static int parser_goto_row71[] = {
1,
- -1, 74
+ -1, 75
};
static int parser_goto_row72[] = {
2,
- -1, 211,
- 214, 370
+ -1, 215,
+ 218, 376
};
static int parser_goto_row73[] = {
1,
- -1, 212
+ -1, 216
};
static int parser_goto_row74[] = {
2,
- -1, 213,
- 214, 371
+ -1, 217,
+ 218, 377
};
static int parser_goto_row75[] = {
- 13,
- -1, 181,
- 144, 289,
- 754, 877,
- 798, 926,
- 838, 984,
- 1004, 1127,
- 1016, 1154,
- 1204, 926,
- 1275, 926,
- 1329, 1384,
- 1407, 1460,
- 1427, 926,
- 1515, 1544
+ 14,
+ -1, 185,
+ 147, 294,
+ 767, 891,
+ 812, 944,
+ 854, 1003,
+ 1021, 1144,
+ 1032, 1168,
+ 1080, 944,
+ 1219, 944,
+ 1284, 944,
+ 1339, 1391,
+ 1410, 1455,
+ 1431, 944,
+ 1497, 1518
};
static int parser_goto_row76[] = {
- 43,
- -1, 471,
- 41, 182,
- 42, 183,
- 43, 184,
- 44, 185,
- 50, 191,
- 51, 192,
- 52, 193,
- 53, 194,
- 55, 195,
- 75, 216,
- 111, 244,
- 112, 245,
- 113, 246,
- 114, 247,
- 118, 253,
- 119, 254,
- 120, 255,
- 121, 256,
- 122, 257,
- 213, 369,
- 371, 507,
- 469, 599,
- 597, 704,
- 602, 707,
- 807, 940,
- 808, 941,
- 809, 942,
- 810, 943,
- 814, 949,
- 815, 950,
- 816, 951,
- 817, 952,
- 818, 953,
- 838, 985,
- 933, 1074,
- 1073, 1206,
- 1087, 1215,
- 1088, 1216,
- 1203, 1315,
- 1224, 1324,
- 1321, 1379,
- 1323, 1380
+ 45,
+ -1, 479,
+ 41, 186,
+ 42, 187,
+ 43, 188,
+ 44, 189,
+ 50, 195,
+ 51, 196,
+ 52, 197,
+ 53, 198,
+ 55, 199,
+ 76, 220,
+ 112, 248,
+ 113, 249,
+ 114, 250,
+ 115, 251,
+ 119, 257,
+ 120, 258,
+ 121, 259,
+ 122, 260,
+ 123, 261,
+ 217, 375,
+ 377, 516,
+ 477, 611,
+ 609, 717,
+ 614, 720,
+ 808, 924,
+ 821, 958,
+ 822, 959,
+ 823, 960,
+ 824, 961,
+ 828, 967,
+ 829, 968,
+ 830, 969,
+ 831, 970,
+ 832, 971,
+ 854, 1004,
+ 951, 1091,
+ 1090, 1221,
+ 1104, 1230,
+ 1105, 1231,
+ 1218, 1325,
+ 1239, 1334,
+ 1331, 1386,
+ 1333, 1387,
+ 1381, 1426
};
static int parser_goto_row77[] = {
- 3,
- -1, 592,
- 180, 337,
- 795, 909
+ 1,
+ -1, 343
};
static int parser_goto_row78[] = {
- 4,
- -1, 1440,
- 712, 833,
- 721, 845,
- 1432, 845
+ 3,
+ -1, 849,
+ 734, 859,
+ 1401, 1443
};
static int parser_goto_row79[] = {
3,
- -1, 834,
- 467, 593,
- 694, 791
+ -1, 850,
+ 475, 604,
+ 706, 804
};
static int parser_goto_row80[] = {
- 3,
- -1, 979,
- 846, 999,
- 1441, 1486
+ 2,
+ -1, 605,
+ 810, 927
};
static int parser_goto_row81[] = {
- 2,
- -1, 980,
- 982, 1111
+ 1,
+ -1, 925
};
static int parser_goto_row82[] = {
2,
- -1, 856,
- 860, 1023
+ -1, 714,
+ 715, 811
};
static int parser_goto_row83[] = {
- 2,
- -1, 700,
- 701, 796
+ 3,
+ -1, 998,
+ 860, 1016,
+ 1444, 1478
};
static int parser_goto_row84[] = {
- 3,
- -1, 927,
- 1275, 1348,
- 1427, 1472
+ 2,
+ -1, 999,
+ 1001, 1129
};
static int parser_goto_row85[] = {
- 3,
- -1, 1071,
- 1072, 1205,
- 1282, 1205
+ 2,
+ -1, 870,
+ 874, 1039
};
static int parser_goto_row86[] = {
- 2,
- -1, 928,
- 1204, 1316
+ 4,
+ -1, 945,
+ 1080, 1215,
+ 1284, 1354,
+ 1431, 1467
};
static int parser_goto_row87[] = {
3,
- -1, 597,
- 695, 792,
- 1242, 1329
+ -1, 1088,
+ 1089, 1220,
+ 1291, 1220
};
static int parser_goto_row88[] = {
- 33,
- -1, 124,
- 77, 219,
- 106, 239,
- 127, 260,
- 170, 326,
- 217, 373,
- 258, 399,
- 324, 373,
- 390, 519,
- 432, 558,
- 498, 625,
- 501, 629,
- 543, 642,
- 546, 645,
- 579, 625,
- 581, 690,
- 668, 771,
- 696, 793,
- 743, 870,
- 769, 373,
- 802, 935,
- 821, 956,
- 930, 219,
- 954, 1086,
- 1045, 625,
- 1047, 1191,
- 1079, 1211,
- 1156, 1278,
- 1238, 1325,
- 1241, 1328,
- 1314, 629,
- 1377, 1424,
- 1413, 1463
+ 2,
+ -1, 946,
+ 1219, 1326
};
static int parser_goto_row89[] = {
- 22,
- -1, 125,
- 77, 220,
- 217, 374,
- 221, 380,
- 223, 381,
- 382, 514,
- 498, 626,
- 501, 630,
- 631, 738,
- 632, 739,
- 650, 748,
- 668, 772,
- 740, 868,
- 769, 889,
- 773, 894,
- 778, 898,
- 899, 1056,
- 1045, 1189,
- 1047, 1192,
- 1193, 1307,
- 1194, 1308,
- 1309, 1372
+ 4,
+ -1, 609,
+ 707, 805,
+ 711, 808,
+ 1258, 1339
};
static int parser_goto_row90[] = {
- 9,
- -1, 75,
- 71, 208,
- 137, 281,
- 168, 323,
- 250, 281,
- 301, 323,
- 666, 768,
- 925, 208,
- 1160, 1280
+ 33,
+ -1, 125,
+ 78, 223,
+ 107, 243,
+ 128, 264,
+ 174, 332,
+ 221, 379,
+ 262, 405,
+ 330, 379,
+ 396, 528,
+ 439, 568,
+ 507, 637,
+ 510, 641,
+ 553, 654,
+ 556, 657,
+ 590, 637,
+ 592, 702,
+ 680, 784,
+ 708, 806,
+ 756, 884,
+ 782, 379,
+ 816, 953,
+ 835, 974,
+ 948, 223,
+ 972, 1103,
+ 1061, 637,
+ 1063, 1205,
+ 1096, 1226,
+ 1170, 1287,
+ 1254, 1335,
+ 1257, 1338,
+ 1324, 641,
+ 1384, 1428,
+ 1416, 1458
};
static int parser_goto_row91[] = {
- 4,
- -1, 343,
- 251, 397,
- 387, 516,
- 513, 636
+ 22,
+ -1, 126,
+ 78, 224,
+ 221, 380,
+ 225, 386,
+ 227, 387,
+ 388, 523,
+ 507, 638,
+ 510, 642,
+ 643, 751,
+ 644, 752,
+ 662, 761,
+ 680, 785,
+ 753, 882,
+ 782, 903,
+ 786, 908,
+ 791, 912,
+ 913, 1072,
+ 1061, 1203,
+ 1063, 1206,
+ 1207, 1316,
+ 1208, 1317,
+ 1318, 1378
};
static int parser_goto_row92[] = {
- 2,
- -1, 605,
- 606, 710
+ 9,
+ -1, 76,
+ 71, 212,
+ 139, 286,
+ 172, 329,
+ 254, 286,
+ 306, 329,
+ 678, 781,
+ 943, 212,
+ 1174, 1289
};
static int parser_goto_row93[] = {
4,
- -1, 295,
- 427, 554,
- 760, 882,
- 1038, 1183
+ -1, 349,
+ 255, 403,
+ 393, 525,
+ 522, 648
};
static int parser_goto_row94[] = {
2,
- -1, 609,
- 477, 612
+ -1, 617,
+ 618, 723
};
static int parser_goto_row95[] = {
- 127,
- -1, 169,
- 12, 76,
- 22, 76,
- 26, 126,
- 28, 76,
- 32, 76,
- 77, 126,
- 91, 76,
- 95, 76,
- 115, 249,
- 142, 76,
- 157, 302,
- 203, 76,
- 217, 126,
- 221, 126,
- 223, 126,
- 241, 126,
- 243, 126,
- 252, 126,
- 331, 76,
- 361, 76,
- 363, 500,
- 382, 126,
- 400, 126,
- 402, 126,
- 403, 126,
- 404, 126,
- 405, 126,
- 407, 126,
- 408, 126,
- 409, 126,
- 410, 126,
- 411, 126,
- 412, 126,
- 413, 126,
- 414, 126,
- 415, 126,
- 416, 126,
- 417, 126,
- 418, 126,
- 419, 545,
- 420, 76,
- 456, 580,
- 457, 76,
- 460, 76,
- 498, 126,
- 501, 126,
- 521, 640,
- 525, 126,
- 548, 76,
- 552, 667,
- 553, 76,
- 559, 687,
- 631, 126,
- 632, 126,
- 650, 126,
- 651, 667,
- 654, 76,
- 656, 667,
- 668, 126,
- 670, 76,
- 709, 820,
- 722, 76,
- 740, 126,
- 750, 76,
- 769, 126,
- 773, 126,
- 777, 76,
- 778, 126,
- 798, 929,
- 811, 945,
- 848, 76,
- 884, 667,
- 886, 1046,
- 899, 126,
- 937, 820,
- 939, 820,
- 948, 820,
- 1016, 1155,
- 1040, 667,
- 1042, 76,
- 1045, 126,
- 1047, 126,
- 1058, 76,
- 1089, 820,
- 1091, 820,
- 1092, 820,
- 1093, 820,
- 1094, 820,
- 1096, 820,
- 1097, 820,
- 1098, 820,
- 1099, 820,
- 1100, 820,
- 1101, 820,
- 1102, 820,
- 1103, 820,
- 1104, 820,
- 1105, 820,
- 1106, 820,
- 1107, 820,
- 1108, 1240,
- 1181, 667,
- 1182, 667,
- 1193, 126,
- 1194, 126,
- 1202, 500,
- 1204, 929,
- 1213, 1320,
- 1218, 820,
- 1275, 929,
- 1293, 126,
- 1309, 126,
- 1329, 1155,
- 1353, 1412,
- 1364, 667,
- 1395, 76,
- 1422, 76,
- 1427, 929,
- 1433, 76,
- 1438, 76,
- 1443, 76,
- 1465, 667,
- 1481, 76,
- 1485, 76,
- 1541, 820,
- 1568, 667
+ 4,
+ -1, 300,
+ 434, 564,
+ 773, 896,
+ 1054, 1197
};
static int parser_goto_row96[] = {
- 129,
- -1, 170,
+ 2,
+ -1, 621,
+ 485, 624
+};
+static int parser_goto_row97[] = {
+ 130,
+ -1, 173,
12, 77,
22, 77,
26, 127,
28, 77,
32, 77,
- 77, 127,
- 91, 77,
- 95, 77,
- 115, 127,
- 142, 77,
- 203, 77,
- 217, 127,
+ 78, 127,
+ 92, 77,
+ 96, 77,
+ 116, 253,
+ 145, 77,
+ 160, 307,
+ 207, 77,
221, 127,
- 223, 127,
- 241, 127,
- 243, 127,
- 252, 127,
- 331, 77,
- 361, 77,
- 363, 501,
- 382, 127,
- 400, 127,
- 402, 127,
- 403, 127,
- 404, 127,
- 405, 127,
- 407, 127,
+ 225, 127,
+ 227, 127,
+ 245, 127,
+ 247, 127,
+ 256, 127,
+ 337, 77,
+ 367, 77,
+ 369, 509,
+ 388, 127,
+ 406, 127,
408, 127,
409, 127,
410, 127,
411, 127,
- 412, 127,
413, 127,
414, 127,
415, 127,
416, 127,
417, 127,
418, 127,
- 419, 546,
- 420, 77,
- 456, 581,
- 457, 77,
- 460, 77,
- 498, 127,
- 501, 127,
- 521, 546,
- 525, 127,
- 548, 77,
- 552, 668,
- 553, 77,
- 559, 581,
- 591, 696,
- 631, 127,
- 632, 127,
- 639, 743,
- 650, 127,
- 651, 668,
- 654, 77,
- 656, 668,
- 668, 127,
- 670, 77,
- 709, 821,
- 722, 77,
- 740, 127,
- 750, 77,
- 769, 127,
- 773, 127,
- 777, 77,
- 778, 127,
- 798, 930,
- 811, 821,
- 848, 77,
- 884, 668,
- 886, 1047,
- 899, 127,
- 937, 821,
- 939, 821,
- 948, 821,
- 1016, 1156,
- 1040, 668,
- 1042, 77,
- 1045, 127,
- 1047, 127,
+ 419, 127,
+ 420, 127,
+ 421, 127,
+ 422, 127,
+ 423, 127,
+ 424, 127,
+ 425, 127,
+ 426, 555,
+ 427, 77,
+ 464, 591,
+ 465, 77,
+ 468, 77,
+ 507, 127,
+ 510, 127,
+ 530, 652,
+ 534, 127,
+ 558, 77,
+ 562, 679,
+ 563, 77,
+ 569, 699,
+ 643, 127,
+ 644, 127,
+ 662, 127,
+ 663, 679,
+ 666, 77,
+ 668, 679,
+ 680, 127,
+ 682, 77,
+ 722, 834,
+ 735, 77,
+ 753, 127,
+ 763, 77,
+ 782, 127,
+ 786, 127,
+ 790, 77,
+ 791, 127,
+ 812, 947,
+ 825, 963,
+ 862, 77,
+ 898, 679,
+ 900, 1062,
+ 913, 127,
+ 955, 834,
+ 957, 834,
+ 966, 834,
+ 1032, 1169,
+ 1056, 679,
1058, 77,
- 1089, 821,
- 1091, 821,
- 1092, 821,
- 1093, 821,
- 1094, 821,
- 1096, 821,
- 1097, 821,
- 1098, 821,
- 1099, 821,
- 1100, 821,
- 1101, 821,
- 1102, 821,
- 1103, 821,
- 1104, 821,
- 1105, 821,
- 1106, 821,
- 1107, 821,
- 1108, 1241,
- 1181, 668,
- 1182, 668,
- 1193, 127,
- 1194, 127,
- 1202, 1314,
- 1204, 930,
- 1213, 1241,
- 1218, 821,
- 1275, 930,
- 1293, 127,
- 1309, 127,
- 1319, 1377,
- 1329, 1156,
- 1353, 1413,
- 1364, 668,
- 1395, 77,
- 1422, 77,
- 1427, 930,
- 1433, 77,
- 1438, 77,
- 1443, 77,
- 1465, 668,
- 1481, 77,
- 1485, 77,
- 1541, 821,
- 1568, 668
-};
-static int parser_goto_row97[] = {
- 1,
- -1, 622
+ 1061, 127,
+ 1063, 127,
+ 1074, 77,
+ 1080, 947,
+ 1106, 834,
+ 1108, 834,
+ 1109, 834,
+ 1110, 834,
+ 1111, 834,
+ 1113, 834,
+ 1114, 834,
+ 1115, 834,
+ 1116, 834,
+ 1117, 834,
+ 1118, 834,
+ 1119, 834,
+ 1120, 834,
+ 1121, 834,
+ 1122, 834,
+ 1123, 834,
+ 1124, 834,
+ 1125, 834,
+ 1126, 1256,
+ 1195, 679,
+ 1196, 679,
+ 1207, 127,
+ 1208, 127,
+ 1217, 509,
+ 1219, 947,
+ 1228, 1330,
+ 1233, 834,
+ 1284, 947,
+ 1302, 127,
+ 1318, 127,
+ 1339, 1169,
+ 1359, 1415,
+ 1370, 679,
+ 1402, 77,
+ 1425, 77,
+ 1431, 947,
+ 1436, 77,
+ 1441, 77,
+ 1446, 77,
+ 1460, 679,
+ 1473, 77,
+ 1477, 77,
+ 1515, 834,
+ 1531, 679
};
static int parser_goto_row98[] = {
- 10,
- -1, 78,
- 80, 225,
- 138, 225,
- 503, 225,
- 610, 225,
- 624, 225,
- 680, 225,
- 698, 225,
- 832, 225,
- 1049, 225
+ 132,
+ -1, 174,
+ 12, 78,
+ 22, 78,
+ 26, 128,
+ 28, 78,
+ 32, 78,
+ 78, 128,
+ 92, 78,
+ 96, 78,
+ 116, 128,
+ 145, 78,
+ 207, 78,
+ 221, 128,
+ 225, 128,
+ 227, 128,
+ 245, 128,
+ 247, 128,
+ 256, 128,
+ 337, 78,
+ 367, 78,
+ 369, 510,
+ 388, 128,
+ 406, 128,
+ 408, 128,
+ 409, 128,
+ 410, 128,
+ 411, 128,
+ 413, 128,
+ 414, 128,
+ 415, 128,
+ 416, 128,
+ 417, 128,
+ 418, 128,
+ 419, 128,
+ 420, 128,
+ 421, 128,
+ 422, 128,
+ 423, 128,
+ 424, 128,
+ 425, 128,
+ 426, 556,
+ 427, 78,
+ 464, 592,
+ 465, 78,
+ 468, 78,
+ 507, 128,
+ 510, 128,
+ 530, 556,
+ 534, 128,
+ 558, 78,
+ 562, 680,
+ 563, 78,
+ 569, 592,
+ 602, 708,
+ 643, 128,
+ 644, 128,
+ 651, 756,
+ 662, 128,
+ 663, 680,
+ 666, 78,
+ 668, 680,
+ 680, 128,
+ 682, 78,
+ 722, 835,
+ 735, 78,
+ 753, 128,
+ 763, 78,
+ 782, 128,
+ 786, 128,
+ 790, 78,
+ 791, 128,
+ 812, 948,
+ 825, 835,
+ 862, 78,
+ 898, 680,
+ 900, 1063,
+ 913, 128,
+ 955, 835,
+ 957, 835,
+ 966, 835,
+ 1032, 1170,
+ 1056, 680,
+ 1058, 78,
+ 1061, 128,
+ 1063, 128,
+ 1074, 78,
+ 1080, 948,
+ 1106, 835,
+ 1108, 835,
+ 1109, 835,
+ 1110, 835,
+ 1111, 835,
+ 1113, 835,
+ 1114, 835,
+ 1115, 835,
+ 1116, 835,
+ 1117, 835,
+ 1118, 835,
+ 1119, 835,
+ 1120, 835,
+ 1121, 835,
+ 1122, 835,
+ 1123, 835,
+ 1124, 835,
+ 1125, 835,
+ 1126, 1257,
+ 1195, 680,
+ 1196, 680,
+ 1207, 128,
+ 1208, 128,
+ 1217, 1324,
+ 1219, 948,
+ 1228, 1257,
+ 1233, 835,
+ 1284, 948,
+ 1302, 128,
+ 1318, 128,
+ 1329, 1384,
+ 1339, 1170,
+ 1359, 1416,
+ 1370, 680,
+ 1402, 78,
+ 1425, 78,
+ 1431, 948,
+ 1436, 78,
+ 1441, 78,
+ 1446, 78,
+ 1460, 680,
+ 1473, 78,
+ 1477, 78,
+ 1515, 835,
+ 1531, 680
};
static int parser_goto_row99[] = {
- 54,
- -1, 128,
- 12, 79,
- 22, 79,
- 28, 79,
- 32, 79,
- 80, 226,
- 91, 79,
- 95, 79,
- 138, 282,
- 142, 79,
- 203, 79,
- 331, 79,
- 361, 79,
- 363, 502,
- 420, 79,
- 457, 79,
- 460, 79,
- 497, 623,
- 503, 633,
- 548, 79,
- 552, 669,
- 553, 79,
- 591, 697,
- 624, 731,
- 639, 697,
- 651, 669,
- 654, 79,
- 656, 669,
- 670, 79,
- 680, 779,
- 698, 794,
- 722, 79,
- 750, 79,
- 777, 79,
- 848, 79,
- 884, 669,
- 886, 1048,
- 1040, 669,
- 1042, 79,
- 1049, 1195,
- 1058, 79,
- 1181, 669,
- 1182, 669,
- 1319, 697,
- 1364, 669,
- 1395, 79,
- 1422, 79,
- 1433, 79,
- 1438, 79,
- 1443, 79,
- 1465, 669,
- 1481, 79,
- 1485, 79,
- 1568, 669
+ 1,
+ -1, 634
};
static int parser_goto_row100[] = {
- 8,
- -1, 1001,
- 1002, 1125,
- 1442, 1487,
- 1480, 1520,
- 1484, 1523,
- 1488, 1525,
- 1521, 1550,
- 1524, 1551
+ 10,
+ -1, 79,
+ 81, 229,
+ 141, 229,
+ 512, 229,
+ 622, 229,
+ 636, 229,
+ 692, 229,
+ 710, 229,
+ 848, 229,
+ 1065, 229
};
static int parser_goto_row101[] = {
- 19,
- -1, 1441,
- 15, 84,
- 611, 715,
- 712, 835,
- 713, 836,
- 716, 837,
- 721, 846,
- 854, 1006,
- 1016, 1157,
- 1154, 1276,
- 1161, 1281,
- 1329, 1385,
- 1384, 1428,
- 1386, 1429,
- 1407, 1461,
- 1432, 846,
- 1460, 1503,
- 1515, 1545,
- 1544, 1562
+ 54,
+ -1, 129,
+ 12, 80,
+ 22, 80,
+ 28, 80,
+ 32, 80,
+ 81, 230,
+ 92, 80,
+ 96, 80,
+ 141, 287,
+ 145, 80,
+ 207, 80,
+ 337, 80,
+ 367, 80,
+ 369, 511,
+ 427, 80,
+ 465, 80,
+ 468, 80,
+ 506, 635,
+ 512, 645,
+ 558, 80,
+ 562, 681,
+ 563, 80,
+ 602, 709,
+ 636, 744,
+ 651, 709,
+ 663, 681,
+ 666, 80,
+ 668, 681,
+ 682, 80,
+ 692, 792,
+ 710, 807,
+ 735, 80,
+ 763, 80,
+ 790, 80,
+ 862, 80,
+ 898, 681,
+ 900, 1064,
+ 1056, 681,
+ 1058, 80,
+ 1065, 1209,
+ 1074, 80,
+ 1195, 681,
+ 1196, 681,
+ 1329, 709,
+ 1370, 681,
+ 1402, 80,
+ 1425, 80,
+ 1436, 80,
+ 1441, 80,
+ 1446, 80,
+ 1460, 681,
+ 1473, 80,
+ 1477, 80,
+ 1531, 681
};
static int parser_goto_row102[] = {
+ 8,
+ -1, 1018,
+ 1019, 1142,
+ 1445, 1479,
+ 1472, 1501,
+ 1476, 1504,
+ 1480, 1506,
+ 1502, 1523,
+ 1505, 1524
+};
+static int parser_goto_row103[] = {
+ 18,
+ -1, 85,
+ 623, 728,
+ 725, 851,
+ 726, 852,
+ 729, 853,
+ 734, 860,
+ 868, 1023,
+ 1032, 1171,
+ 1168, 1285,
+ 1175, 1290,
+ 1339, 1392,
+ 1391, 1432,
+ 1393, 1433,
+ 1401, 1444,
+ 1410, 1456,
+ 1455, 1485,
+ 1497, 1519,
+ 1518, 1529
+};
+static int parser_goto_row104[] = {
50,
- -1, 145,
+ -1, 148,
0, 11,
4, 11,
16, 11,
23, 11,
24, 11,
25, 11,
- 28, 142,
- 32, 142,
- 62, 203,
- 87, 11,
+ 28, 145,
+ 32, 145,
+ 62, 207,
88, 11,
- 92, 11,
- 101, 11,
+ 89, 11,
+ 93, 11,
102, 11,
- 104, 11,
- 204, 361,
- 229, 11,
- 235, 11,
- 285, 420,
- 331, 460,
- 421, 548,
- 457, 460,
- 552, 670,
- 553, 142,
- 651, 750,
- 654, 460,
- 656, 750,
- 722, 460,
- 775, 203,
- 777, 460,
- 848, 460,
- 884, 1042,
- 896, 361,
- 1040, 1042,
- 1058, 142,
- 1181, 670,
- 1182, 750,
- 1364, 1042,
- 1395, 460,
- 1422, 142,
- 1433, 460,
- 1438, 460,
- 1443, 460,
- 1465, 750,
- 1481, 460,
- 1485, 460,
- 1568, 750
+ 103, 11,
+ 105, 11,
+ 208, 367,
+ 233, 11,
+ 239, 11,
+ 290, 427,
+ 337, 468,
+ 428, 558,
+ 465, 468,
+ 562, 682,
+ 563, 145,
+ 663, 763,
+ 666, 468,
+ 668, 763,
+ 735, 468,
+ 788, 207,
+ 790, 468,
+ 862, 468,
+ 898, 1058,
+ 910, 367,
+ 1056, 1058,
+ 1074, 145,
+ 1195, 682,
+ 1196, 763,
+ 1370, 1058,
+ 1402, 468,
+ 1425, 145,
+ 1436, 468,
+ 1441, 468,
+ 1446, 468,
+ 1460, 763,
+ 1473, 468,
+ 1477, 468,
+ 1531, 763
};
-static int parser_goto_row103[] = {
+static int parser_goto_row105[] = {
263,
- -1, 95,
+ -1, 96,
0, 12,
4, 22,
16, 22,
- 17, 91,
+ 17, 92,
23, 22,
- 24, 91,
- 30, 146,
- 31, 147,
- 33, 150,
- 34, 151,
- 40, 179,
- 46, 187,
- 47, 188,
- 74, 215,
- 87, 91,
- 101, 91,
- 107, 240,
- 108, 241,
- 109, 242,
- 110, 243,
- 116, 251,
- 117, 252,
- 153, 297,
- 154, 298,
- 155, 299,
- 156, 300,
- 158, 303,
- 189, 344,
- 190, 345,
- 196, 346,
- 197, 347,
- 198, 348,
- 199, 349,
- 205, 362,
- 207, 363,
- 212, 368,
- 238, 387,
- 248, 392,
- 261, 400,
- 262, 402,
- 263, 403,
- 264, 404,
- 265, 405,
- 266, 406,
- 267, 407,
- 268, 408,
- 269, 409,
- 270, 410,
- 271, 411,
- 272, 412,
- 273, 413,
- 274, 414,
- 275, 415,
- 276, 416,
- 277, 417,
- 278, 418,
- 280, 419,
- 287, 422,
- 290, 425,
- 291, 426,
- 293, 427,
- 295, 428,
- 296, 429,
- 304, 437,
- 305, 439,
- 306, 440,
- 307, 441,
- 308, 442,
- 309, 443,
- 310, 444,
- 311, 445,
- 312, 446,
- 313, 447,
- 314, 448,
- 315, 449,
- 316, 450,
- 317, 451,
- 318, 452,
- 319, 453,
- 320, 454,
- 321, 455,
- 322, 456,
- 335, 467,
- 341, 473,
- 342, 474,
- 350, 476,
- 351, 477,
- 358, 497,
- 372, 508,
- 379, 513,
- 388, 517,
- 394, 521,
- 396, 522,
- 401, 525,
- 423, 550,
- 430, 557,
- 434, 559,
- 438, 561,
- 462, 587,
- 466, 591,
- 470, 600,
- 495, 619,
- 499, 627,
- 506, 634,
- 518, 639,
- 544, 643,
- 551, 648,
- 554, 683,
- 555, 684,
- 556, 685,
- 585, 691,
- 588, 694,
- 593, 702,
- 598, 705,
- 603, 708,
- 604, 709,
- 607, 711,
- 615, 718,
- 616, 719,
- 618, 726,
- 638, 742,
- 653, 755,
- 655, 757,
- 657, 760,
- 686, 784,
- 693, 790,
- 699, 795,
- 703, 798,
- 706, 800,
- 720, 842,
- 727, 851,
- 728, 857,
- 732, 862,
- 733, 863,
- 745, 871,
- 746, 872,
- 767, 886,
- 781, 900,
- 782, 901,
- 786, 903,
- 787, 904,
- 791, 907,
- 799, 932,
- 801, 934,
- 803, 936,
- 804, 937,
- 805, 938,
- 806, 939,
- 812, 947,
- 813, 948,
- 822, 957,
- 835, 981,
- 840, 989,
- 846, 981,
- 855, 1007,
- 858, 1018,
- 859, 1021,
- 860, 1024,
- 869, 1030,
- 878, 1036,
- 879, 1037,
- 881, 1038,
- 882, 1039,
- 902, 1059,
- 927, 1069,
- 944, 1081,
- 958, 1089,
- 959, 1091,
- 960, 1092,
- 961, 1093,
- 962, 1094,
- 963, 1095,
- 964, 1096,
- 965, 1097,
- 966, 1098,
- 967, 1099,
- 968, 1100,
- 969, 1101,
- 970, 1102,
- 971, 1103,
- 972, 1104,
- 973, 1105,
- 974, 1106,
- 975, 1107,
+ 24, 92,
+ 30, 149,
+ 31, 150,
+ 33, 153,
+ 34, 154,
+ 40, 183,
+ 46, 191,
+ 47, 192,
+ 75, 219,
+ 88, 92,
+ 102, 92,
+ 108, 244,
+ 109, 245,
+ 110, 246,
+ 111, 247,
+ 117, 255,
+ 118, 256,
+ 156, 302,
+ 157, 303,
+ 158, 304,
+ 159, 305,
+ 161, 308,
+ 193, 350,
+ 194, 351,
+ 200, 352,
+ 201, 353,
+ 202, 354,
+ 203, 355,
+ 209, 368,
+ 211, 369,
+ 216, 374,
+ 242, 393,
+ 252, 398,
+ 265, 406,
+ 266, 408,
+ 267, 409,
+ 268, 410,
+ 269, 411,
+ 270, 412,
+ 271, 413,
+ 272, 414,
+ 273, 415,
+ 274, 416,
+ 275, 417,
+ 276, 418,
+ 277, 419,
+ 278, 420,
+ 279, 421,
+ 280, 422,
+ 281, 423,
+ 282, 424,
+ 283, 425,
+ 285, 426,
+ 292, 429,
+ 295, 432,
+ 296, 433,
+ 298, 434,
+ 300, 435,
+ 301, 436,
+ 309, 444,
+ 310, 446,
+ 311, 447,
+ 312, 448,
+ 313, 449,
+ 314, 450,
+ 315, 451,
+ 316, 452,
+ 317, 453,
+ 318, 454,
+ 319, 455,
+ 320, 456,
+ 321, 457,
+ 322, 458,
+ 323, 459,
+ 324, 460,
+ 325, 461,
+ 326, 462,
+ 327, 463,
+ 328, 464,
+ 341, 475,
+ 347, 481,
+ 348, 482,
+ 356, 484,
+ 357, 485,
+ 364, 506,
+ 378, 517,
+ 385, 522,
+ 394, 526,
+ 400, 530,
+ 402, 531,
+ 407, 534,
+ 430, 560,
+ 437, 567,
+ 441, 569,
+ 445, 571,
+ 470, 598,
+ 474, 602,
+ 478, 612,
+ 504, 631,
+ 508, 639,
+ 515, 646,
+ 527, 651,
+ 554, 655,
+ 561, 660,
+ 564, 695,
+ 565, 696,
+ 566, 697,
+ 596, 703,
+ 599, 706,
+ 604, 712,
+ 610, 718,
+ 615, 721,
+ 616, 722,
+ 619, 724,
+ 627, 731,
+ 628, 732,
+ 630, 739,
+ 650, 755,
+ 665, 768,
+ 667, 770,
+ 669, 773,
+ 698, 797,
+ 705, 803,
+ 713, 810,
+ 716, 812,
+ 719, 814,
+ 733, 858,
+ 740, 865,
+ 741, 871,
+ 745, 876,
+ 746, 877,
+ 758, 885,
+ 759, 886,
+ 780, 900,
+ 794, 914,
+ 795, 915,
+ 799, 917,
+ 800, 918,
+ 804, 921,
+ 813, 950,
+ 815, 952,
+ 817, 954,
+ 818, 955,
+ 819, 956,
+ 820, 957,
+ 826, 965,
+ 827, 966,
+ 836, 975,
+ 851, 1000,
+ 856, 1008,
+ 860, 1000,
+ 869, 1024,
+ 872, 1034,
+ 873, 1037,
+ 874, 1040,
+ 883, 1046,
+ 892, 1052,
+ 893, 1053,
+ 895, 1054,
+ 896, 1055,
+ 916, 1075,
+ 923, 1080,
+ 945, 1086,
+ 962, 1098,
+ 976, 1106,
977, 1108,
- 982, 981,
- 986, 1115,
- 987, 1116,
- 990, 1118,
- 1005, 1130,
- 1008, 1133,
- 1009, 1135,
- 1011, 1136,
- 1019, 1165,
- 1022, 1167,
- 1025, 1171,
- 1026, 1173,
- 1028, 1174,
- 1029, 1175,
- 1032, 1177,
- 1033, 1178,
- 1034, 1179,
- 1057, 1196,
- 1068, 1202,
- 1070, 1204,
- 1075, 1207,
- 1083, 1213,
- 1084, 1214,
- 1090, 1218,
- 1114, 1244,
- 1119, 1246,
- 1128, 1253,
- 1131, 1256,
- 1134, 1258,
- 1146, 1275,
- 1168, 1285,
- 1169, 1287,
- 1172, 1289,
- 1176, 1293,
- 1180, 1297,
- 1183, 1301,
- 1184, 1302,
- 1199, 1312,
- 1210, 1319,
- 1239, 1326,
- 1248, 1331,
- 1263, 619,
- 1267, 619,
- 1279, 1353,
- 1286, 1357,
- 1291, 1360,
- 1294, 1362,
- 1310, 1373,
- 1317, 1376,
- 1336, 619,
- 1338, 619,
- 1342, 619,
- 1366, 1420,
- 1367, 1421,
- 1381, 1425,
- 1382, 1426,
- 1383, 1427,
- 1387, 1430,
- 1389, 1431,
- 1423, 1468,
- 1441, 981,
- 1444, 1489,
- 1448, 1493,
- 1464, 1508,
- 1470, 1513,
- 1471, 1514,
- 1474, 1516,
- 1475, 1517,
- 1476, 1518,
- 1491, 1527,
- 1500, 1532,
- 1502, 1534,
- 1512, 1541,
- 1533, 1557,
- 1539, 1559,
- 1542, 1561,
- 1546, 1563
+ 978, 1109,
+ 979, 1110,
+ 980, 1111,
+ 981, 1112,
+ 982, 1113,
+ 983, 1114,
+ 984, 1115,
+ 985, 1116,
+ 986, 1117,
+ 987, 1118,
+ 988, 1119,
+ 989, 1120,
+ 990, 1121,
+ 991, 1122,
+ 992, 1123,
+ 993, 1124,
+ 994, 1125,
+ 996, 1126,
+ 1001, 1000,
+ 1005, 1133,
+ 1006, 1134,
+ 1009, 1136,
+ 1022, 1147,
+ 1025, 1150,
+ 1026, 1152,
+ 1029, 1153,
+ 1035, 1179,
+ 1038, 1181,
+ 1041, 1185,
+ 1042, 1187,
+ 1044, 1188,
+ 1045, 1189,
+ 1048, 1191,
+ 1049, 1192,
+ 1050, 1193,
+ 1073, 1210,
+ 1085, 1217,
+ 1087, 1219,
+ 1092, 1222,
+ 1100, 1228,
+ 1101, 1229,
+ 1107, 1233,
+ 1132, 1260,
+ 1137, 1262,
+ 1145, 1267,
+ 1148, 1270,
+ 1151, 1272,
+ 1160, 1284,
+ 1182, 1294,
+ 1183, 1296,
+ 1186, 1298,
+ 1190, 1302,
+ 1194, 1306,
+ 1197, 1310,
+ 1198, 1311,
+ 1213, 1321,
+ 1215, 1322,
+ 1225, 1329,
+ 1255, 1336,
+ 1264, 1341,
+ 1277, 631,
+ 1279, 631,
+ 1288, 1359,
+ 1295, 1363,
+ 1300, 1366,
+ 1303, 1368,
+ 1319, 1379,
+ 1327, 1383,
+ 1346, 631,
+ 1348, 631,
+ 1351, 631,
+ 1372, 1423,
+ 1373, 1424,
+ 1388, 1429,
+ 1389, 1430,
+ 1390, 1431,
+ 1394, 1434,
+ 1396, 1435,
+ 1427, 1463,
+ 1444, 1000,
+ 1447, 1481,
+ 1459, 1490,
+ 1465, 1495,
+ 1466, 1496,
+ 1469, 1498,
+ 1470, 1499,
+ 1471, 1500,
+ 1494, 1515,
+ 1513, 1526,
+ 1516, 1528,
+ 1520, 1530
};
-static int parser_goto_row104[] = {
+static int parser_goto_row106[] = {
1,
-1, 13
};
-static int parser_goto_row105[] = {
+static int parser_goto_row107[] = {
1,
-1, 14
};
-static int parser_goto_row106[] = {
- 1,
- -1, 15
-};
-static int parser_goto_row107[] = {
- 2,
- -1, 725,
- 1391, 1436
-};
static int parser_goto_row108[] = {
1,
- -1, 1225
+ -1, 15
};
static int parser_goto_row109[] = {
- 1,
- -1, -1
+ 4,
+ -1, 738,
+ 1352, 1408,
+ 1398, 1439,
+ 1405, 1451
};
static int parser_goto_row110[] = {
- 2,
- -1, 822,
- 1541, 1560
+ 1,
+ -1, 1240
};
static int parser_goto_row111[] = {
1,
- -1, 823
+ -1, -1
};
static int parser_goto_row112[] = {
- 6,
- -1, 824,
- 937, 1076,
- 1089, 1217,
- 1091, 1219,
- 1092, 1220,
- 1218, 1322
+ 2,
+ -1, 836,
+ 1515, 1527
};
static int parser_goto_row113[] = {
1,
- -1, 825
+ -1, 837
};
static int parser_goto_row114[] = {
- 10,
- -1, 826,
- 1093, 1221,
- 1094, 1222,
- 1098, 1228,
- 1099, 1229,
- 1100, 1230,
- 1101, 1231,
- 1102, 1232,
- 1103, 1233,
- 1104, 1234
+ 6,
+ -1, 838,
+ 955, 1093,
+ 1106, 1232,
+ 1108, 1234,
+ 1109, 1235,
+ 1233, 1332
};
static int parser_goto_row115[] = {
- 3,
- -1, 827,
- 1096, 1226,
- 1097, 1227
+ 1,
+ -1, 839
};
static int parser_goto_row116[] = {
- 6,
- -1, 828,
- 939, 1080,
- 948, 1085,
- 1105, 1235,
- 1106, 1236,
- 1107, 1237
+ 10,
+ -1, 840,
+ 1110, 1236,
+ 1111, 1237,
+ 1115, 1243,
+ 1116, 1244,
+ 1117, 1245,
+ 1118, 1246,
+ 1119, 1247,
+ 1120, 1248,
+ 1121, 1249
};
static int parser_goto_row117[] = {
- 1,
- -1, 829
+ 3,
+ -1, 841,
+ 1113, 1241,
+ 1114, 1242
};
static int parser_goto_row118[] = {
- 2,
- -1, 830,
- 811, 946
+ 5,
+ -1, 842,
+ 1122, 1250,
+ 1123, 1251,
+ 1124, 1252,
+ 1125, 1253
};
static int parser_goto_row119[] = {
- 4,
- -1, 334,
- 242, 390,
- 299, 432,
- 392, 520
+ 3,
+ -1, 843,
+ 957, 1097,
+ 966, 1102
};
static int parser_goto_row120[] = {
1,
- -1, -1
+ -1, 844
};
static int parser_goto_row121[] = {
- 1,
- -1, 1158
+ 2,
+ -1, 845,
+ 825, 964
};
static int parser_goto_row122[] = {
1,
- -1, -1
+ -1, 846
};
static int parser_goto_row123[] = {
4,
- -1, 129,
- 1016, 1159,
- 1293, 1361,
- 1329, 1159
+ -1, 340,
+ 246, 396,
+ 304, 439,
+ 398, 529
};
static int parser_goto_row124[] = {
1,
- -1, 130
+ -1, -1
};
static int parser_goto_row125[] = {
- 6,
- -1, 131,
- 241, 389,
- 400, 524,
- 402, 526,
- 403, 527,
- 525, 641
+ 1,
+ -1, 1172
};
static int parser_goto_row126[] = {
1,
- -1, 132
+ -1, -1
};
static int parser_goto_row127[] = {
- 10,
- -1, 133,
- 404, 528,
- 405, 529,
- 409, 533,
- 410, 534,
- 411, 535,
- 412, 536,
- 413, 537,
- 414, 538,
- 415, 539
+ 4,
+ -1, 130,
+ 1032, 1173,
+ 1302, 1367,
+ 1339, 1173
};
static int parser_goto_row128[] = {
- 3,
- -1, 134,
- 407, 531,
- 408, 532
+ 1,
+ -1, 131
};
static int parser_goto_row129[] = {
6,
- -1, 135,
- 243, 391,
- 252, 398,
- 416, 540,
- 417, 541,
- 418, 542
+ -1, 132,
+ 245, 395,
+ 406, 533,
+ 408, 535,
+ 409, 536,
+ 534, 653
};
static int parser_goto_row130[] = {
1,
- -1, 136
+ -1, 133
};
static int parser_goto_row131[] = {
- 4,
- -1, 137,
- 115, 250,
- 1016, 1160,
- 1329, 1160
+ 10,
+ -1, 134,
+ 410, 537,
+ 411, 538,
+ 415, 542,
+ 416, 543,
+ 417, 544,
+ 418, 545,
+ 419, 546,
+ 420, 547,
+ 421, 548
};
static int parser_goto_row132[] = {
- 1,
- -1, 464
+ 3,
+ -1, 135,
+ 413, 540,
+ 414, 541
};
static int parser_goto_row133[] = {
- 7,
- -1, 465,
- 461, 586,
- 792, 908,
- 906, 1062,
- 1060, 1200,
- 1078, 1209,
- 1208, 1318
+ 5,
+ -1, 136,
+ 422, 549,
+ 423, 550,
+ 424, 551,
+ 425, 552
};
static int parser_goto_row134[] = {
- 1,
- -1, 590
+ 3,
+ -1, 137,
+ 247, 397,
+ 256, 404
};
static int parser_goto_row135[] = {
- 2,
- -1, 1161,
- 1329, 1386
+ 1,
+ -1, 138
};
static int parser_goto_row136[] = {
- 1,
- -1, 1162
+ 4,
+ -1, 139,
+ 116, 254,
+ 1032, 1174,
+ 1339, 1174
};
static int parser_goto_row137[] = {
2,
- -1, 1079,
- 1081, 1212
+ -1, 140,
+ 808, 926
};
static int parser_goto_row138[] = {
1,
- -1, -1
+ -1, 472
};
static int parser_goto_row139[] = {
- 1,
- -1, -1
+ 7,
+ -1, 473,
+ 469, 597,
+ 805, 922,
+ 920, 1078,
+ 1076, 1214,
+ 1095, 1224,
+ 1223, 1328
};
static int parser_goto_row140[] = {
1,
- -1, -1
+ -1, 601
};
static int parser_goto_row141[] = {
1,
-1, -1
};
static int parser_goto_row142[] = {
- 1,
- -1, -1
+ 2,
+ -1, 1175,
+ 1339, 1393
};
static int parser_goto_row143[] = {
1,
- -1, -1
+ -1, 1176
};
static int parser_goto_row144[] = {
- 1,
- -1, -1
+ 2,
+ -1, 1096,
+ 1098, 1227
};
static int parser_goto_row145[] = {
1,
-1, -1
};
static int parser_goto_row149[] = {
- 8,
- -1, 751,
- 656, 758,
- 884, 1043,
- 1040, 1185,
- 1182, 1299,
- 1364, 1419,
- 1465, 1509,
- 1568, 1571
+ 1,
+ -1, -1
};
static int parser_goto_row150[] = {
- 3,
- -1, 752,
- 552, 671,
- 1181, 1298
+ 1,
+ -1, -1
};
static int parser_goto_row151[] = {
1,
- -1, 672
+ -1, -1
};
static int parser_goto_row152[] = {
1,
- -1, 673
+ -1, -1
};
static int parser_goto_row153[] = {
1,
- -1, 674
+ -1, -1
};
static int parser_goto_row154[] = {
1,
- -1, 675
+ -1, -1
};
static int parser_goto_row155[] = {
1,
- -1, 676
+ -1, -1
};
static int parser_goto_row156[] = {
1,
- -1, 677
+ -1, -1
};
static int parser_goto_row157[] = {
1,
- -1, 678
+ -1, -1
};
static int parser_goto_row158[] = {
- 1,
- -1, 679
+ 8,
+ -1, 764,
+ 668, 771,
+ 898, 1059,
+ 1056, 1199,
+ 1196, 1308,
+ 1370, 1422,
+ 1460, 1491,
+ 1531, 1534
};
static int parser_goto_row159[] = {
- 18,
- -1, 178,
- 175, 330,
- 658, 761,
- 662, 765,
- 764, 883,
- 887, 1050,
- 888, 1051,
- 890, 1052,
- 891, 1053,
- 892, 1054,
- 893, 1055,
- 1044, 1188,
- 1179, 1296,
- 1297, 1363,
- 1303, 1368,
- 1304, 1369,
- 1305, 1370,
- 1306, 1371
+ 3,
+ -1, 765,
+ 562, 683,
+ 1195, 1307
};
static int parser_goto_row160[] = {
1,
- -1, -1
+ -1, 684
};
static int parser_goto_row161[] = {
1,
- -1, -1
+ -1, 685
};
static int parser_goto_row162[] = {
1,
- -1, -1
+ -1, 686
};
static int parser_goto_row163[] = {
1,
- -1, -1
+ -1, 687
};
static int parser_goto_row164[] = {
1,
- -1, -1
+ -1, 688
};
static int parser_goto_row165[] = {
- 10,
- -1, 143,
- 32, 149,
- 553, 682,
- 651, 753,
- 656, 759,
- 1058, 1198,
- 1182, 1300,
- 1422, 1467,
- 1465, 1510,
- 1568, 1572
+ 1,
+ -1, 689
};
static int parser_goto_row166[] = {
1,
- -1, -1
+ -1, 690
};
static int parser_goto_row167[] = {
1,
- -1, 931
+ -1, 691
};
static int parser_goto_row168[] = {
- 1,
- -1, 1163
+ 18,
+ -1, 182,
+ 179, 336,
+ 670, 774,
+ 674, 778,
+ 777, 897,
+ 901, 1066,
+ 902, 1067,
+ 904, 1068,
+ 905, 1069,
+ 906, 1070,
+ 907, 1071,
+ 1060, 1202,
+ 1193, 1305,
+ 1306, 1369,
+ 1312, 1374,
+ 1313, 1375,
+ 1314, 1376,
+ 1315, 1377
};
static int parser_goto_row169[] = {
1,
};
static int parser_goto_row171[] = {
1,
- -1, 1016
+ -1, -1
};
static int parser_goto_row172[] = {
- 2,
- -1, 16,
- 4, 23
+ 1,
+ -1, -1
};
static int parser_goto_row173[] = {
- 4,
- -1, 17,
- 4, 24,
- 16, 87,
- 23, 101
+ 1,
+ -1, -1
};
static int parser_goto_row174[] = {
- 8,
- -1, 18,
- 4, 25,
- 16, 88,
- 17, 92,
- 23, 102,
- 24, 104,
- 87, 229,
- 101, 235
+ 10,
+ -1, 146,
+ 32, 152,
+ 563, 694,
+ 663, 766,
+ 668, 772,
+ 1074, 1212,
+ 1196, 1309,
+ 1425, 1462,
+ 1460, 1492,
+ 1531, 1535
};
static int parser_goto_row175[] = {
- 4,
- -1, 858,
- 855, 1008,
- 860, 1025,
- 1022, 1168
+ 1,
+ -1, -1
};
static int parser_goto_row176[] = {
- 8,
- -1, 859,
- 855, 1009,
- 858, 1019,
- 860, 1026,
- 1008, 1134,
- 1022, 1169,
- 1025, 1172,
- 1168, 1286
+ 1,
+ -1, 949
};
static int parser_goto_row177[] = {
1,
- -1, 1131
+ -1, 1177
};
static int parser_goto_row178[] = {
1,
- -1, 990
+ -1, -1
};
static int parser_goto_row179[] = {
1,
- -1, 1121
+ -1, -1
};
static int parser_goto_row180[] = {
1,
- -1, 789
+ -1, 1032
};
static int parser_goto_row181[] = {
- 3,
- -1, 204,
- 285, 421,
- 775, 896
+ 2,
+ -1, 16,
+ 4, 23
};
static int parser_goto_row182[] = {
- 1,
- -1, 214
+ 4,
+ -1, 17,
+ 4, 24,
+ 16, 88,
+ 23, 102
};
static int parser_goto_row183[] = {
- 1,
- -1, 701
+ 8,
+ -1, 18,
+ 4, 25,
+ 16, 89,
+ 17, 93,
+ 23, 103,
+ 24, 105,
+ 88, 233,
+ 102, 239
};
static int parser_goto_row184[] = {
- 1,
- -1, 982
+ 4,
+ -1, 872,
+ 869, 1025,
+ 874, 1041,
+ 1038, 1182
};
static int parser_goto_row185[] = {
- 1,
- -1, 860
+ 8,
+ -1, 873,
+ 869, 1026,
+ 872, 1035,
+ 874, 1042,
+ 1025, 1151,
+ 1038, 1183,
+ 1041, 1186,
+ 1182, 1295
};
static int parser_goto_row186[] = {
- 2,
- -1, 1072,
- 1162, 1282
+ 1,
+ -1, 1148
};
static int parser_goto_row187[] = {
1,
- -1, 606
+ -1, 1009
};
static int parser_goto_row188[] = {
- 50,
- -1, 138,
- 12, 80,
- 22, 80,
- 28, 80,
- 32, 80,
- 91, 80,
- 95, 80,
- 142, 80,
- 203, 80,
- 331, 80,
- 361, 80,
- 363, 503,
- 420, 80,
- 457, 80,
- 460, 80,
- 476, 610,
- 477, 610,
- 497, 624,
- 548, 80,
- 552, 680,
- 553, 80,
- 591, 698,
- 639, 698,
- 651, 680,
- 654, 80,
- 656, 680,
- 670, 80,
- 711, 832,
- 722, 80,
- 750, 80,
- 777, 80,
- 848, 80,
- 884, 680,
- 886, 1049,
- 1040, 680,
- 1042, 80,
- 1058, 80,
- 1181, 680,
- 1182, 680,
- 1319, 698,
- 1364, 680,
- 1395, 80,
- 1422, 80,
- 1433, 80,
- 1438, 80,
- 1443, 80,
- 1465, 680,
- 1481, 80,
- 1485, 80,
- 1568, 680
+ 1,
+ -1, 1139
};
static int parser_goto_row189[] = {
+ 1,
+ -1, 802
+};
+static int parser_goto_row190[] = {
+ 3,
+ -1, 208,
+ 290, 428,
+ 788, 910
+};
+static int parser_goto_row191[] = {
+ 1,
+ -1, 218
+};
+static int parser_goto_row192[] = {
+ 1,
+ -1, 715
+};
+static int parser_goto_row193[] = {
+ 1,
+ -1, 1001
+};
+static int parser_goto_row194[] = {
+ 1,
+ -1, 874
+};
+static int parser_goto_row195[] = {
+ 2,
+ -1, 1089,
+ 1176, 1291
+};
+static int parser_goto_row196[] = {
+ 1,
+ -1, 618
+};
+static int parser_goto_row197[] = {
+ 50,
+ -1, 141,
+ 12, 81,
+ 22, 81,
+ 28, 81,
+ 32, 81,
+ 92, 81,
+ 96, 81,
+ 145, 81,
+ 207, 81,
+ 337, 81,
+ 367, 81,
+ 369, 512,
+ 427, 81,
+ 465, 81,
+ 468, 81,
+ 484, 622,
+ 485, 622,
+ 506, 636,
+ 558, 81,
+ 562, 692,
+ 563, 81,
+ 602, 710,
+ 651, 710,
+ 663, 692,
+ 666, 81,
+ 668, 692,
+ 682, 81,
+ 724, 848,
+ 735, 81,
+ 763, 81,
+ 790, 81,
+ 862, 81,
+ 898, 692,
+ 900, 1065,
+ 1056, 692,
+ 1058, 81,
+ 1074, 81,
+ 1195, 692,
+ 1196, 692,
+ 1329, 710,
+ 1370, 692,
+ 1402, 81,
+ 1425, 81,
+ 1436, 81,
+ 1441, 81,
+ 1446, 81,
+ 1460, 692,
+ 1473, 81,
+ 1477, 81,
+ 1531, 692
+};
+static int parser_goto_row198[] = {
2,
-1, 19,
- 13, 81
+ 13, 82
};
-static int parser_goto_row190[] = {
+static int parser_goto_row199[] = {
3,
-1, 20,
- 19, 97,
- 81, 227
+ 19, 98,
+ 82, 231
};
const int* const parser_goto_table[] = {
parser_goto_row187,
parser_goto_row188,
parser_goto_row189,
- parser_goto_row190
+ parser_goto_row190,
+ parser_goto_row191,
+ parser_goto_row192,
+ parser_goto_row193,
+ parser_goto_row194,
+ parser_goto_row195,
+ parser_goto_row196,
+ parser_goto_row197,
+ parser_goto_row198,
+ parser_goto_row199
};
$ end if
$ end foreach
+
+redef class EOF
+ redef fun parser_index: Int
+ do
+ return ${tokens/eof/@parser_index}
+ end
+end
+
$ end template
return phases
end
+ # Set of already analyzed modules.
+ private var phased_modules = new HashSet[AModule]
+
# Run all registered phases on a set of modules
fun run_phases(nmodules: Collection[AModule])
do
end
for nmodule in nmodules do
+ if phased_modules.has(nmodule) then continue
+ phased_modules.add nmodule
+
self.info("Semantic analysis module {nmodule.location.file.filename}", 2)
var vannot = new AnnotationPhaseVisitor
phase.process_nclassdef(nclassdef)
for npropdef in nclassdef.n_propdefs do
assert phase.toolcontext == self
- phase.process_npropdef(npropdef)
+ phase_process_npropdef(phase, npropdef)
end
end
if errcount != self.error_count then
var time1 = get_time
self.info("*** END SEMANTIC ANALYSIS: {time1-time0} ***", 2)
+
+ errors_info
+ end
+
+ fun phase_process_npropdef(phase: Phase, npropdef: APropdef)
+ do
+ phase.process_npropdef(npropdef)
end
end
force_alive("Int")
force_alive("Float")
force_alive("Char")
+ force_alive("Pointer")
while not todo.is_empty do
var mmethoddef = todo.shift
# Alias of `name`
redef fun to_s do return self.name
+
+ # The declaration of the variable, if any
+ var location: nullable Location = null
+
+ # Is the local variable not read and need a warning?
+ var warn_unread = false is writable
end
# Mark where break and continue will branch.
# All stacked scope. `scopes.first` is the current scope
private var scopes: List[Scope] = new List[Scope]
+ # Shift and check the last scope
+ fun shift_scope
+ do
+ assert not scopes.is_empty
+ var scope = scopes.shift
+ for v in scope.variables.values do
+ if v.warn_unread then
+ toolcontext.advice(v.location, "unread-variable", "Warning: local variable {v.name} is never read.")
+ end
+ end
+ end
+
# Regiter a local variable.
# Display an error on toolcontext if a variable with the same name is masked.
fun register_variable(node: ANode, variable: Variable): Bool
return false
end
scopes.first.variables[name] = variable
+ variable.location = node.location
return true
end
scope.escapemark = escapemark
scopes.unshift(scope)
enter_visit(node)
- scopes.shift
+ shift_scope
end
# Look for a label `name`.
do
var v = new ScopeVisitor(toolcontext)
v.enter_visit(self)
+ v.shift_scope
end
end
var nid = self.n_id
var variable = new Variable(nid.text)
v.register_variable(nid, variable)
+ variable.warn_unread = true # wait for some read mark.
self.variable = variable
end
end
self.escapemark = escapemark
v.enter_visit_block(n_block, escapemark)
- v.scopes.shift
+ v.shift_scope
end
end
redef class ACallExpr
redef fun variable_create(variable)
do
+ variable.warn_unread = false
return new AVarExpr.init_avarexpr(n_id)
end
end
redef class ACallReassignExpr
redef fun variable_create(variable)
do
+ variable.warn_unread = false
return new AVarReassignExpr.init_avarreassignexpr(n_id, n_assign_op, n_value)
end
end
if sup == null then return null # Forward error
if sup == sub then
- self.modelbuilder.warning(node, "Warning: Expression is already a {sup}.")
+ self.modelbuilder.warning(node, "useless-type-test", "Warning: Expression is already a {sup}.")
else if self.is_subtype(sub, sup) then
- self.modelbuilder.warning(node, "Warning: Expression is already a {sup} since it is a {sub}.")
+ self.modelbuilder.warning(node, "useless-type-test", "Warning: Expression is already a {sup} since it is a {sub}.")
end
return sup
end
return null
end
+ var info = mproperty.deprecation
+ if info != null and self.mpropdef.mproperty.deprecation == null then
+ var mdoc = info.mdoc
+ if mdoc != null then
+ self.modelbuilder.warning(node, "deprecated-method", "Deprecation Warning: Method '{name}' is deprecated: {mdoc.content.first}")
+ else
+ self.modelbuilder.warning(node, "deprecated-method", "Deprecation Warning: Method '{name}' is deprecated.")
+ end
+ end
+
var propdefs = mproperty.lookup_definitions(self.mmodule, unsafe_type)
var mpropdef
if propdefs.length == 0 then
else if propdefs.length == 1 then
mpropdef = propdefs.first
else
- self.modelbuilder.warning(node, "Warning: confliting property definitions for property {name} in {unsafe_type}: {propdefs.join(" ")}")
+ self.modelbuilder.warning(node, "property-conflict", "Warning: conflicting property definitions for property {name} in {unsafe_type}: {propdefs.join(" ")}")
mpropdef = mproperty.intro
end
self.mtype = mtype
if mtype isa MClassType then
- v.modelbuilder.warning(self, "Warning: expression is already not null, since it is a `{mtype}`.")
+ v.modelbuilder.warning(self, "useless-type-test", "Warning: expression is already not null, since it is a `{mtype}`.")
return
end
assert mtype.need_anchor
var u = v.anchor_to(mtype)
if not u isa MNullableType then
- v.modelbuilder.warning(self, "Warning: expression is already not null, since it is a `{mtype}: {u}`.")
+ v.modelbuilder.warning(self, "useless-type-test", "Warning: expression is already not null, since it is a `{mtype}: {u}`.")
return
end
end
redef class AStarExpr
redef fun property_name do return "*"
end
+redef class AStarstarExpr
+ redef fun property_name do return "**"
+end
redef class ASlashExpr
redef fun property_name do return "/"
end
var mtype = v.resolve_mtype(ntype)
if mtype != null and mtype != expr then
var umtype = v.anchor_to(mtype)
- v.modelbuilder.warning(self, "Found type {expr} (-> {unsafe}), expected {mtype} (-> {umtype})")
+ v.modelbuilder.warning(self, "debug", "Found type {expr} (-> {unsafe}), expected {mtype} (-> {umtype})")
end
self.is_typed = true
end
# limitations under the License.
# Program to test the `markdown` module on real source files.
-module test_markdown
+module test_docdown
import modelize
import highlight
# Compare model
var sorter = new MEntityNameSorter
-print "mprojects:"
+print "# mprojects:"
var org_mprojects = org_model.mprojects.to_a
sorter.sort org_mprojects
print org_mprojects.join(" ")
+print "------------------------------------"
var neo_mprojects = neo_model.mprojects.to_a
sorter.sort neo_mprojects
print neo_mprojects.join(" ")
-print "mmodules:"
+print "\n# mmodules:"
var org_mmodules = org_model.mmodules.to_a
sorter.sort org_mmodules
print org_mmodules.join(" ")
+print "------------------------------------"
var neo_mmodules = neo_model.mmodules.to_a
sorter.sort neo_mmodules
print neo_mmodules.join(" ")
-print "mclasses:"
+print "\n# mclasses:"
var org_mclasses = org_model.mclasses.to_a
sorter.sort org_mclasses
print org_mclasses.join(" ")
+print "------------------------------------"
var neo_mclasses = neo_model.mclasses.to_a
sorter.sort neo_mclasses
print neo_mclasses.join(" ")
-print "mproperties:"
+print "\n# mproperties:"
var org_mproperties = org_model.mproperties.to_a
sorter.sort org_mproperties
print org_mproperties.join(" ")
+print "------------------------------------"
var neo_mproperties = neo_model.mproperties.to_a
sorter.sort neo_mproperties
print neo_mproperties.join(" ")
+
+print "\n# msignatures:"
+for org_mprop in org_mproperties do
+ if not org_mprop isa MMethod then continue
+ print "{org_mprop.name}{org_mprop.intro.msignature or else ""}"
+end
+print "------------------------------------"
+for neo_mprop in neo_mproperties do
+ if not neo_mprop isa MMethod then continue
+ print "{neo_mprop.name}{neo_mprop.intro.msignature or else ""}"
+end
# We want executable code
if not (ast isa AModule or ast isa ABlockExpr or ast isa AExpr) then
if ndoc != null and n.tag == "pre" and toolcontext.opt_warn.value > 1 then
- toolcontext.warning(ndoc.location, "Warning: There is a block of code that is not valid Nit, thus not considered a nitunit")
- if ast isa AError then toolcontext.warning(ast.location, ast.message)
+ toolcontext.warning(ndoc.location, "invalid-block", "Warning: There is a block of code that is not valid Nit, thus not considered a nitunit")
+ if ast isa AError then toolcontext.warning(ast.location, "syntax-error", ast.message)
ndoc = null # To avoid multiple warning in the same node
end
return
v.enter_visit(ast)
if not v.foundit then
if ndoc != null and n.tag == "pre" and toolcontext.opt_warn.value > 1 then
- toolcontext.warning(ndoc.location, "Warning: There is a block of Nit code without `assert`, thus not considered a nitunit")
+ toolcontext.warning(ndoc.location, "invalid-block", "Warning: There is a block of Nit code without `assert`, thus not considered a nitunit")
ndoc = null # To avoid multiple warning in the same node
end
return
var ne = new HTMLTag("failure")
ne.attr("message", msg)
tc.add ne
- toolcontext.warning(ndoc.location, "FAILURE: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
+ toolcontext.warning(ndoc.location, "failure", "FAILURE: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
toolcontext.modelbuilder.failed_entities += 1
else if res2 != 0 then
var ne = new HTMLTag("error")
ne.attr("message", msg)
tc.add ne
- toolcontext.warning(ndoc.location, "ERROR: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
+ toolcontext.warning(ndoc.location, "error", "ERROR: {tc.attrs["classname"]}.{tc.attrs["name"]} (in {file}): {msg}")
toolcontext.modelbuilder.failed_entities += 1
end
toolcontext.check_errors
var loc = test_method.location
if res != 0 then
failure = msg
- toolcontext.warning(loc, "FAILURE: {test_method.name} (in file {file}.nit): {msg}")
+ toolcontext.warning(loc, "failure", "FAILURE: {test_method.name} (in file {file}.nit): {msg}")
toolcontext.modelbuilder.failed_tests += 1
end
toolcontext.check_errors
var loc = test_method.location
if res != 0 then
error = msg
- toolcontext.warning(loc, "ERROR: {test_method.name} (in file {file}.nit): {msg}")
+ toolcontext.warning(loc, "failure", "ERROR: {test_method.name} (in file {file}.nit): {msg}")
toolcontext.modelbuilder.failed_tests += 1
end
toolcontext.check_errors
# See the License for the specific language governing permissions and
# limitations under the License.
-# Common command-line tool infractructure than handle options and error messages
+# Common command-line tool infrastructure than handle options and error messages
module toolcontext
import opts
import version
import template
+# A warning or an error
class Message
super Comparable
redef type OTHER: Message
+ # The origin of the message in the source code, if any.
var location: nullable Location
+
+ # The category of the message.
+ #
+ # Used by quality-control tool for statistics or to enable/disable things individually.
+ var tag: nullable String
+
+ # The human-readable description of the message.
+ #
+ # It should be short and fit on a single line.
+ # It should also have meaningful information first in case
+ # on truncation by an IDE for instance.
var text: String
# Comparisons are made on message locations.
var yellow = "{esc}[0;33m"
var def = "{esc}[0m"
+ var tag = tag
+ if tag != null then
+ tag = " ({tag})"
+ else
+ tag = ""
+ end
var l = location
if l == null then
- return text
+ return "{text}{tag}"
else if l.file == null then
- return "{yellow}{l}{def}: {text}"
+ return "{yellow}{l}{def}: {text}{tag}"
else
- return "{yellow}{l}{def}: {text}\n{l.colored_line("1;31")}"
+ return "{yellow}{l}{def}: {text}{tag}\n{l.colored_line("1;31")}"
end
end
end
messages.clear
end
- if error_count > 0 then exit(1)
+ if error_count > 0 then
+ errors_info
+ exit(1)
+ end
+ end
+
+ # Display total error informations
+ fun errors_info
+ do
+ if error_count == 0 and warning_count == 0 then return
+ if opt_no_color.value then return
+ sys.stderr.write "Errors: {error_count}. Warnings: {warning_count}.\n"
end
# Display an error
fun error(l: nullable Location, s: String)
do
- messages.add(new Message(l,s))
+ messages.add(new Message(l,null,s))
error_count = error_count + 1
if opt_stop_on_first_error.value then check_errors
end
check_errors
end
- # Display a warning
- fun warning(l: nullable Location, s: String)
+ # Display a first-level warning.
+ #
+ # First-level warnings are warnings that SHOULD be corrected,
+ # and COULD usually be immediately corrected.
+ #
+ # * There is a simple correction
+ # * There is no reason to let the code this way (no reasonable @supresswarning-like annotation)
+ # * They always are real issues (no false positive)
+ #
+ # First-level warnings are displayed by default (except if option `-q` is given).
+ fun warning(l: nullable Location, tag: String, text: String)
do
if opt_warn.value == 0 then return
- messages.add(new Message(l,s))
+ messages.add(new Message(l, tag, text))
+ warning_count = warning_count + 1
+ if opt_stop_on_first_error.value then check_errors
+ end
+
+ # Display a second-level warning.
+ #
+ # Second-level warnings are warnings that should require investigation,
+ # but cannot always be immediately corrected.
+ #
+ # * The correction could be complex. e.g. require a refactorisation or an API change.
+ # * The correction cannot be done. e.g. Code that use a deprecated API for some compatibility reason.
+ # * There is not a real issue (false positive). Note that this should be unlikely.
+ # * Transitional: While a real warning, it fires a lot in current code, so a transition is needed
+ # in order to fix them before promoting the advice to a warning.
+ #
+ # In order to prevent warning inflation à la Java, second-level warnings are not displayed by
+ # default and require an additional option `-W`.
+ fun advice(l: nullable Location, tag: String, text: String)
+ do
+ if opt_warn.value <= 1 then return
+ messages.add(new Message(l, tag, text))
warning_count = warning_count + 1
if opt_stop_on_first_error.value then check_errors
end
# A multi-line string is recommmended.
#
# eg. `"Usage: tool [OPTION]... [FILE]...\nDo some things."`
- var tooldescription: String writable = "Usage: [OPTION]... [ARG]..."
+ var tooldescription: String = "Usage: [OPTION]... [ARG]..." is writable
# Does `process_options` should accept an empty sequence of arguments.
# ie. nothing except options.
# Is `false` by default.
#
# If required, if should be set by the client before calling `process_options`
- var accept_no_arguments writable = false
+ var accept_no_arguments = false is writable
# print the full usage of the tool.
# Is called by `process_option` on `--help`.
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Group head module for UML generation services
+module uml
+
+import uml_base
+import uml_class
+import uml_module
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Exposes the base class for UML generation of a `Model`
+module uml_base
+
+import toolcontext
+import model_utils
+
+redef class ToolContext
+ # -p
+ var opt_privacy = new OptionBool("Generates private API", "-p", "--private")
+
+ # Shortcut for the value of `self.opt_privacy`
+ fun private_gen: Bool do return opt_privacy.value
+
+ redef init do
+ option_context.add_option opt_privacy
+ super
+ end
+end
+
+class UMLModel
+ var model: Model
+ var mainmodule: MModule
+ var ctx: ToolContext
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Provides facilities of exporting a `Model` to a UML class diagram
+module uml_class
+
+import uml_base
+
+redef class UMLModel
+ # Generates a UML class diagram from a `Model`
+ fun generate_class_uml: Streamable do
+ var tpl = new Template
+ tpl.add "digraph G \{\n"
+ tpl.add """ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ node [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ shape = "record"
+ ]
+
+ edge [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ ]\n"""
+ tpl.add model.tpl_class(ctx, mainmodule)
+ tpl.add "\}"
+ return tpl
+ end
+end
+
+redef class Model
+
+ # Generates a UML Class diagram from the entities of a `Model`
+ fun tpl_class(ctx: ToolContext, main: MModule): Streamable do
+ var t = new Template
+ for i in mclasses do
+ if not ctx.private_gen and i.visibility != public_visibility then continue
+ t.add i.tpl_class(ctx, main)
+ t.add "\n"
+ end
+ return t
+ end
+
+end
+
+redef class MEntity
+ # Generates a dot-compatible `Streamable` UML Class diagram from `self`
+ fun tpl_class(ctx: ToolContext, main: MModule): Streamable is abstract
+end
+
+redef class MClass
+
+ redef fun tpl_class(ctx, main): Streamable do
+ var t = new Template
+ t.add "{name} [\n label = \"\{"
+ if kind == abstract_kind then
+ t.add "abstract\\n{name}"
+ else if kind == interface_kind then
+ t.add "interface\\n{name}"
+ else
+ t.add "{name}"
+ end
+ if arity > 0 then
+ t.add "["
+ var formal = intro.parameter_names
+ t.add formal.first
+ for i in [1 .. formal.length[ do
+ t.add ", "
+ t.add formal[i]
+ end
+ t.add "]"
+ end
+ t.add "|"
+ var props: Collection[MProperty]
+ if ctx.private_gen then
+ props = intro_mproperties(none_visibility)
+ else
+ props = intro_mproperties(public_visibility)
+ end
+ for i in props do
+ if i isa MAttribute then
+ t.add i.tpl_class(ctx, main)
+ t.add "\\l"
+ end
+ end
+ t.add "|"
+ for i in intro_methods do
+ if not ctx.private_gen and i.visibility != public_visibility then continue
+ t.add i.tpl_class(ctx, main)
+ t.add "\\l"
+ end
+ t.add "\}\"\n]\n"
+ var g = in_hierarchy(main).direct_greaters
+ for i in g do
+ if not ctx.private_gen and i.visibility != public_visibility then continue
+ t.add "{i.name} -> {name} [dir=back"
+ if i.kind == interface_kind then
+ t.add " arrowtail=open style=dashed"
+ else
+ t.add " arrowtail=empty"
+ end
+ t.add "];\n"
+ end
+ return t
+ end
+
+end
+
+redef class MMethod
+ redef fun tpl_class(ctx, main) do
+ var tpl = new Template
+ tpl.add visibility.tpl_class
+ tpl.add " "
+ tpl.add name.escape_to_dot
+ tpl.add intro.msignature.tpl_class(ctx, main)
+ return tpl
+ end
+end
+
+redef class MSignature
+
+ redef fun tpl_class(ctx, main) do
+ var t = new Template
+ t.add "("
+ var params = new Array[MParameter]
+ for i in mparameters do
+ params.add i
+ end
+ if params.length > 0 then
+ t.add params.first.name
+ t.add ": "
+ t.add params.first.mtype.tpl_class(ctx, main)
+ for i in [1 .. params.length [ do
+ t.add ", "
+ t.add params[i].name
+ t.add ": "
+ t.add params[i].mtype.tpl_class(ctx, main)
+ end
+ end
+ t.add ")"
+ if return_mtype != null then
+ t.add ": "
+ t.add return_mtype.tpl_class(ctx, main)
+ end
+ return t
+ end
+end
+
+redef class MAttribute
+ redef fun tpl_class(ctx, main) do
+ var tpl = new Template
+ tpl.add visibility.tpl_class
+ tpl.add " "
+ tpl.add name
+ tpl.add ": "
+ tpl.add intro.static_mtype.tpl_class(ctx, main)
+ return tpl
+ end
+end
+
+redef class MVisibility
+ # Returns the visibility as a UML token
+ #
+ # assert public_visibility.tpl_class == "+"
+ # assert private_visibility.tpl_class == "-"
+ fun tpl_class: Streamable do
+ if self == private_visibility then
+ return "-"
+ else if self == protected_visibility then
+ return "#"
+ else if self == public_visibility then
+ return "+"
+ else
+ return "+"
+ end
+ end
+end
+
+redef class MClassType
+ redef fun tpl_class(c, m) do
+ return name
+ end
+end
+
+redef class MGenericType
+ redef fun tpl_class(c, m) do
+ var t = new Template
+ t.add name.substring(0, name.index_of('['))
+ t.add "["
+ t.add arguments.first.tpl_class(c, m)
+ for i in [1 .. arguments.length[ do
+ t.add ", "
+ t.add arguments[i].tpl_class(c, m)
+ end
+ t.add "]"
+ return t
+ end
+end
+
+redef class MParameterType
+ redef fun tpl_class(c, m) do
+ var n = mclass.intro.parameter_names
+ return n[rank]
+ end
+end
+
+redef class MVirtualType
+ redef fun tpl_class(c, m) do
+ return name
+ end
+end
+
+redef class MNullableType
+ redef fun tpl_class(c, m) do
+ var t = new Template
+ t.add "nullable "
+ t.add mtype.tpl_class(c, m)
+ return t
+ end
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Services for generation of a UML package diagram based on a `Model`
+module uml_module
+
+import uml_base
+import uml_class
+
+redef class UMLModel
+ # Generates a UML package diagram from a `Model`
+ fun generate_package_uml: Streamable do
+ var tpl = new Template
+ tpl.add "digraph G \{\n"
+ tpl.add """ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ node [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ shape = "record"
+ ]
+ edge [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ ]\n"""
+ tpl.add model.tpl_module(ctx, mainmodule)
+ tpl.add "\}"
+ return tpl
+ end
+end
+
+redef class Model
+ # Returns a UML package diagram of `main`
+ fun tpl_module(ctx: ToolContext, main: MModule): Streamable do
+ return main.tpl_module(ctx, main)
+ end
+end
+
+redef class MModule
+ redef fun tpl_module(ctx, main) do
+ var t = new Template
+ t.add "subgraph cluster{name} \{\n"
+ t.add "label = \"{name}\"\n"
+ for i in mclassdefs do
+ if not ctx.private_gen and i.mclass.visibility != public_visibility then continue
+ t.add i.tpl_module(ctx, main)
+ end
+ t.add "\}\n"
+ return t
+ end
+end
+
+redef class MEntity
+ # Builds a dot UML package diagram entity from `self`
+ fun tpl_module(ctx: ToolContext, main: MModule): Streamable is abstract
+end
+
+redef class MClassDef
+
+ # Colour for the border of a class when first introduced
+ #
+ # Defaults to a shade of green
+ var intro_colour = "#58B26A"
+
+ # Colour for the border of a class when refined
+ #
+ # Defaults to a shade of red
+ var redef_colour = "#B24758"
+
+ redef fun tpl_module(ctx, main) do
+ var t = new Template
+ t.add "{mmodule}{name} [\n\tlabel = \"\{"
+ if mclass.kind == abstract_kind then
+ t.add "abstract\\n{name}"
+ else if mclass.kind == interface_kind then
+ t.add "interface\\n{name}"
+ else
+ t.add "{name}"
+ end
+ if mclass.arity > 0 then
+ t.add "["
+ var formal = mclass.intro.parameter_names
+ t.add formal.first
+ for i in [1 .. formal.length[ do
+ t.add ", "
+ t.add formal[i]
+ end
+ t.add "]"
+ end
+ t.add "|"
+ for i in mpropdefs do
+ if not i isa MAttributeDef then continue
+ if not ctx.private_gen and i.mproperty.visibility != public_visibility then continue
+ t.add i.tpl_module(ctx, main)
+ t.add "\\l"
+ end
+ t.add "|"
+ for i in mpropdefs do
+ if not i isa MMethodDef then continue
+ if not ctx.private_gen and i.mproperty.visibility != public_visibility then continue
+ t.add i.tpl_module(ctx, main)
+ t.add "\\l"
+ end
+ t.add "\}\""
+ if is_intro then
+ t.add "color=\"{intro_colour}\""
+ else
+ t.add "color=\"{redef_colour}\""
+ end
+ t.add "\n]\n"
+ var supers = in_hierarchy.direct_greaters
+ for i in supers do
+ if i.mmodule != mmodule then continue
+ t.add "{i.mmodule}{i.name} -> {mmodule}{name} [dir=back"
+ if i.mclass.kind == interface_kind then
+ t.add " arrowtail=open style=dashed"
+ else
+ t.add " arrowtail=empty"
+ end
+ t.add "]\n"
+ end
+ return t
+ end
+end
+
+redef class MMethodDef
+ redef fun tpl_module(ctx, main) do
+ var t = new Template
+ t.add mproperty.visibility.tpl_class
+ t.add " "
+ t.add name.escape_to_dot
+ t.add msignature.tpl_class(ctx, main)
+ return t
+ end
+end
+
+redef class MAttributeDef
+ redef fun tpl_module(ctx, main) do
+ var t = new Template
+ t.add mproperty.visibility.tpl_class
+ t.add " "
+ t.add name
+ t.add ": "
+ t.add static_mtype.tpl_class(ctx, main)
+ return t
+ end
+end
# Handles memory and garbage collection
var memory_manager: MemoryManager = new MemoryManager
+ # The unique instance of the `MInit` value
+ var initialization_value: Instance
+
+ init(modelbuilder: ModelBuilder, mainmodule: MModule, arguments: Array[String])
+ do
+ super
+ var init_type = new MInitType(mainmodule.model)
+ initialization_value = new MutableInstance(init_type)
+ end
+
# Subtyping test for the virtual machine
redef fun is_subtype(sub, sup: MType): Bool
do
if sup isa MParameterType or sup isa MVirtualType then
return sub == sup
end
-
+
if sub isa MParameterType or sub isa MVirtualType then
sub = sub.anchor_to(mainmodule, anchor)
# Manage the second layer of null/nullable
// Follow the pointer to somewhere in the vtable
long unsigned int *offset = (long unsigned int*)(((long int *)vtable)[-hv]);
-
+
// If the pointed value is corresponding to the identifier, the test is true, otherwise false
return *offset == id;
`}
-
+
# Redef init_instance to simulate the loading of a class
redef fun init_instance(recv: Instance)
do
recv.vtable = recv.mtype.as(MClassType).mclass.vtable
assert(recv isa MutableInstance)
-
- recv.internal_attributes = init_internal_attributes(null_instance, recv.mtype.as(MClassType).mclass.cached_attributes.length)
+ recv.internal_attributes = init_internal_attributes(initialization_value, recv.mtype.as(MClassType).mclass.all_mattributes(mainmodule, none_visibility).length)
super
end
-
+
# Initialize the internal representation of an object (its attribute values)
- private fun init_internal_attributes(null_instance: Instance, size: Int): Pointer
+ # `init_instance` is the initial value of attributes
+ private fun init_internal_attributes(init_instance: Instance, size: Int): Pointer
import Array[Instance].length, Array[Instance].[] `{
-
+
Instance* attributes = malloc(sizeof(Instance) * size);
int i;
for(i=0; i<size; i++)
- attributes[i] = null_instance;
+ attributes[i] = init_instance;
- Instance_incr_ref(null_instance);
+ Instance_incr_ref(init_instance);
return attributes;
`}
# Creates the runtime structures for this class
fun create_class(mclass: MClass) do mclass.make_vt(self)
- # Return the value of the attribute `mproperty for the object `recv
+ # Return the value of the attribute `mproperty` for the object `recv`
redef fun read_attribute(mproperty: MAttribute, recv: Instance): Instance
do
assert recv isa MutableInstance
# Read the attribute value with perfect hashing
var id = mproperty.intro_mclassdef.mclass.vtable.id
-
+
var i = read_attribute_ph(recv.internal_attributes, recv.vtable.internal_vtable,
recv.vtable.mask, id, mproperty.offset)
-
+
+ # If we get a `MInit` value, throw an error
+ if i == initialization_value then
+ fatal("Uninitialized attribute {mproperty.name}")
+ abort
+ end
+
return i
end
- # Return the attribute value in `instance with a sequence of perfect_hashing
- # `instance is the attributes array of the receiver
- # `vtable is the pointer to the virtual table of the class (of the receiver)
- # `mask is the perfect hashing mask of the class
- # `id is the identifier of the class
- # `offset is the relative offset of this attribute
+ # Return the attribute value in `instance` with a sequence of perfect_hashing
+ # `instance` is the attributes array of the receiver
+ # `vtable` is the pointer to the virtual table of the class (of the receiver)
+ # `mask` is the perfect hashing mask of the class
+ # `id` is the identifier of the class
+ # `offset` is the relative offset of this attribute
private fun read_attribute_ph(instance: Pointer, vtable: Pointer, mask: Int, id: Int, offset: Int): Instance `{
// Perfect hashing position
int hv = mask & id;
long unsigned int *pointer = (long unsigned int*)(((long int *)vtable)[-hv]);
-
+
// pointer+1 is the position where the delta of the class is
int absolute_offset = *(pointer + 1);
Instance res = ((Instance *)instance)[absolute_offset + offset];
-
+
return res;
`}
- # Replace in `recv the value of the attribute `mproperty by `value
+ # Replace in `recv` the value of the attribute `mproperty` by `value`
redef fun write_attribute(mproperty: MAttribute, recv: Instance, value: Instance)
do
assert recv isa MutableInstance
var id = mproperty.intro_mclassdef.mclass.vtable.id
-
+
# Replace the old value of mproperty in recv
write_attribute_ph(recv.internal_attributes, recv.vtable.internal_vtable,
recv.vtable.mask, id, mproperty.offset, value)
end
# Replace the value of an attribute in an instance
- # `instance is the attributes array of the receiver
- # `vtable is the pointer to the virtual table of the class (of the receiver)
- # `mask is the perfect hashing mask of the class
- # `id is the identifier of the class
- # `offset is the relative offset of this attribute
- # `value is the new value for this attribute
+ # `instance` is the attributes array of the receiver
+ # `vtable` is the pointer to the virtual table of the class (of the receiver)
+ # `mask` is the perfect hashing mask of the class
+ # `id` is the identifier of the class
+ # `offset` is the relative offset of this attribute
+ # `value` is the new value for this attribute
private fun write_attribute_ph(instance: Pointer, vtable: Pointer, mask: Int, id: Int, offset: Int, value: Instance) `{
// Perfect hashing position
int hv = mask & id;
((Instance *)instance)[absolute_offset + offset] = value;
Instance_incr_ref(value);
`}
+
+ # Is the attribute `mproperty` initialized in the instance `recv`?
+ redef fun isset_attribute(mproperty: MAttribute, recv: Instance): Bool
+ do
+ assert recv isa MutableInstance
+
+ # Read the attribute value with internal perfect hashing read
+ # because we do not want to throw an error if the value is `initialization_value`
+ var id = mproperty.intro_mclassdef.mclass.vtable.id
+
+ var i = read_attribute_ph(recv.internal_attributes, recv.vtable.internal_vtable,
+ recv.vtable.mask, id, mproperty.offset)
+
+ return i != initialization_value
+ end
end
redef class MClass
# True when the class is effectively loaded by the vm, false otherwise
var loaded: Bool = false
- # Cached attributes for faster instanciations of this class
- var cached_attributes: Array[MAttribute] = new Array[MAttribute]
+ # For each loaded subclass, keep the position of the group of attributes
+ # introduced by self class in the object
+ var positions_attributes: HashMap[MClass, Int] = new HashMap[MClass, Int]
+
+ # For each loaded subclass, keep the position of the group of methods
+ # introduced by self class in the vtable
+ var positions_methods: HashMap[MClass, Int] = new HashMap[MClass, Int]
# Allocates a VTable for this class and gives it an id
private fun make_vt(v: VirtualMachine)
do
if loaded then return
- # Superclasses contains all superclasses except self
- var superclasses = new Array[MClass]
- superclasses.add_all(ancestors)
+ # `superclasses` contains the order of superclasses for virtual tables
+ var superclasses = superclasses_ordering(v)
superclasses.remove(self)
- v.mainmodule.linearize_mclasses(superclasses)
# Make_vt for super-classes
var ids = new Array[Int]
var nb_methods = new Array[Int]
var nb_attributes = new Array[Int]
+ # Absolute offset of the beginning of the attributes table
+ var offset_attributes = 0
+ # Absolute offset of the beginning of the methods table
+ var offset_methods = 0
+
for parent in superclasses do
- if parent.vtable == null then parent.make_vt(v)
-
+ if not parent.loaded then parent.make_vt(v)
+
# Get the number of introduced methods and attributes for this class
var methods = 0
var attributes = 0
attributes += 1
end
end
-
+
ids.push(parent.vtable.id)
nb_methods.push(methods)
nb_attributes.push(attributes)
+
+ # Update `positions_attributes` and `positions_methods` in `parent`
+ update_positions(offset_attributes, offset_methods, parent)
+
+ offset_attributes += attributes
+ offset_methods += methods
end
-
+
# When all super-classes have their identifiers and vtables, allocate current one
- allocate_vtable(v, ids, nb_methods, nb_attributes)
+ allocate_vtable(v, ids, nb_methods, nb_attributes, offset_attributes, offset_methods)
loaded = true
# The virtual table now needs to be filled with pointer to methods
end
# Allocate a single vtable
- # ids : Array of superclasses identifiers
- # nb_methods : Array which contain the number of introducted methods for each class in ids
- # nb_attributes : Array which contain the number of introducted attributes for each class in ids
- private fun allocate_vtable(v: VirtualMachine, ids: Array[Int], nb_methods: Array[Int], nb_attributes: Array[Int])
+ # `ids : Array of superclasses identifiers
+ # `nb_methods : Array which contain the number of introduced methods for each class in ids
+ # `nb_attributes : Array which contain the number of introduced attributes for each class in ids
+ # `offset_attributes : Offset from the beginning of the table of the group of attributes
+ # `offset_methods : Offset from the beginning of the table of the group of methods
+ private fun allocate_vtable(v: VirtualMachine, ids: Array[Int], nb_methods: Array[Int], nb_attributes: Array[Int],
+ offset_attributes: Int, offset_methods: Int)
do
vtable = new VTable
var idc = new Array[Int]
var nb_attributes_total = new Array[Int]
var self_methods = 0
- var self_attributes = 0
-
+ var nb_introduced_attributes = 0
+
# For self attributes, fixing offsets
var relative_offset = 0
for p in intro_mproperties(none_visibility) do
if p isa MMethod then self_methods += 1
- if p isa MAttribute then
- self_attributes += 1
+ if p isa MAttribute then
+ nb_introduced_attributes += 1
p.offset = relative_offset
relative_offset += 1
- cached_attributes.push(p)
end
end
nb_methods_total.push(self_methods)
nb_attributes_total.add_all(nb_attributes)
- nb_attributes_total.push(self_attributes)
+ nb_attributes_total.push(nb_introduced_attributes)
+
+ # Save the offsets of self class
+ offset_attributes += nb_introduced_attributes
+ offset_methods += self_methods
+ update_positions(offset_attributes, offset_methods, self)
- # Since we have the number of attributes for each class, calculate the delta
+ # Since we have the number of attributes for each class, calculate the delta
var d = calculate_delta(nb_attributes_total)
vtable.internal_vtable = v.memory_manager.init_vtable(ids_total, nb_methods_total, d, vtable.mask)
end
# Computes delta for each class
# A delta represents the offset for this group of attributes in the object
- # nb_attributes : number of attributes for each class (classes are linearized from Object to current)
- # return deltas for each class
+ # `nb_attributes` : number of attributes for each class (classes are linearized from Object to current)
+ # return deltas for each class
private fun calculate_delta(nb_attributes: Array[Int]): Array[Int]
do
var deltas = new Array[Int]
return deltas
end
+
+ # Order superclasses of self
+ # Return the order of superclasses in runtime structures of this class
+ private fun superclasses_ordering(v: VirtualMachine): Array[MClass]
+ do
+ var superclasses = new Array[MClass]
+ superclasses.add_all(ancestors)
+
+ var res = new Array[MClass]
+ if superclasses.length > 1 then
+ # Starting at self
+ var ordering = self.dfs(v, res)
+
+ return ordering
+ else
+ # There is no super-class, self is Object
+ return superclasses
+ end
+ end
+
+ # A kind of Depth-First-Search for superclasses ordering
+ # `v` : the current executed instance of VirtualMachine
+ # `res` : Result Array, ie current superclasses ordering
+ private fun dfs(v: VirtualMachine, res: Array[MClass]): Array[MClass]
+ do
+ # Add this class at the beginning
+ res.insert(self, 0)
+
+ var direct_parents = self.in_hierarchy(v.mainmodule).direct_greaters.to_a
+
+ if direct_parents.length > 1 then
+ # Prefix represents the class which has the most properties
+ # we try to choose it in first to reduce the number of potential recompilations
+ var prefix = null
+ var max = -1
+ for cl in direct_parents do
+ # If we never have visited this class
+ if not res.has(cl) then
+ var properties_length = cl.all_mproperties(v.mainmodule, none_visibility).length
+ if properties_length > max then
+ max = properties_length
+ prefix = cl
+ end
+ end
+ end
+
+ if prefix != null then
+ # Add the prefix class ordering at the beginning of our sequence
+ var prefix_res = new Array[MClass]
+ prefix_res = prefix.dfs(v, prefix_res)
+
+ # Then we recurse on other classes
+ for cl in direct_parents do
+ if cl != prefix then
+ res = new Array[MClass]
+ res = cl.dfs(v, res)
+
+ for cl_res in res do
+ if not prefix_res.has(cl_res) then prefix_res.push(cl_res)
+ end
+ end
+ end
+ res = prefix_res
+ end
+
+ res.push(self)
+ else
+ if direct_parents.length > 0 then
+ res = direct_parents.first.dfs(v, res)
+ end
+ end
+
+ if not res.has(self) then res.push(self)
+
+ return res
+ end
+
+ # Update positions of self class in `parent`
+ # `attributes_offset`: absolute offset of introduced attributes
+ # `methods_offset`: absolute offset of introduced methods
+ private fun update_positions(attributes_offsets: Int, methods_offset:Int, parent: MClass)
+ do
+ parent.positions_attributes[self] = attributes_offsets
+ parent.positions_methods[self] = methods_offset
+ end
end
redef class MAttribute
# Redef MutableInstance to improve implementation of attributes in objects
redef class MutableInstance
-
+
# C-array to store pointers to attributes of this Object
var internal_attributes: Pointer
end
+# Is the type of the initial value inside attributes
+class MInitType
+ super MType
+
+ redef var model: Model
+ protected init(model: Model)
+ do
+ self.model = model
+ end
+
+ redef fun to_s do return "InitType"
+ redef fun as_nullable do return self
+ redef fun need_anchor do return false
+ redef fun resolve_for(mtype, anchor, mmodule, cleanup_virtual) do return self
+ redef fun can_resolve_for(mtype, anchor, mmodule) do return true
+
+ redef fun collect_mclassdefs(mmodule) do return new HashSet[MClassDef]
+
+ redef fun collect_mclasses(mmodule) do return new HashSet[MClass]
+
+ redef fun collect_mtypes(mmodule) do return new HashSet[MClassType]
+end
+
# A VTable contains the virtual method table for the dispatch
# and informations to perform subtyping tests
class VTable
class MemoryManager
# Allocate and fill a virtual table
- fun init_vtable(ids: Array[Int], nb_methods: Array[Int], nb_attributes: Array[Int], mask: Int): Pointer
+ fun init_vtable(ids: Array[Int], nb_methods: Array[Int], nb_attributes: Array[Int], mask: Int): Pointer
do
# Allocate in C current virtual table
var res = intern_init_vtable(ids, nb_methods, nb_attributes, mask)
end
# Construct virtual tables with a bi-dimensional layout
- private fun intern_init_vtable(ids: Array[Int], nb_methods: Array[Int], deltas: Array[Int], mask: Int): Pointer
+ private fun intern_init_vtable(ids: Array[Int], nb_methods: Array[Int], deltas: Array[Int], mask: Int): Pointer
import Array[Int].length, Array[Int].[] `{
// Allocate and fill current virtual table
for(i = 0; i<nb_classes; i++) {
/* - One for each method of this class
* - One for the delta (offset of this group of attributes in objects)
- * - One for the id
+ * - One for the id
*/
total_size += Array_of_Int__index(nb_methods, i);
total_size += 2;
// Add one because we start to fill the vtable at position 1 (0 is the init position)
total_size += mask+2;
long unsigned int* vtable = malloc(sizeof(long unsigned int)*total_size);
-
+
// Initialisation to the first position of the virtual table (ie : Object)
long unsigned int *init = vtable + mask + 2;
for(i=0; i<total_size; i++)
vtable[i] = (long unsigned int)init;
- // Set the virtual table to its position 0
+ // Set the virtual table to its position 0
// ie: after the hashtable
vtable = vtable + mask + 1;
-
+
int current_size = 1;
for(i = 0; i < nb_classes; i++) {
/*
- vtable[hv] contains a pointer to the group of introducted methods
+ vtable[hv] contains a pointer to the group of introduced methods
For each superclasse we have in virtual table :
(id | delta | introduced methods)
*/
vtable[current_size] = Array_of_Int__index(ids, i);
vtable[current_size + 1] = Array_of_Int__index(deltas, i);
vtable[-hv] = (long unsigned int)&(vtable[current_size]);
-
+
current_size += 2;
current_size += Array_of_Int__index(nb_methods, i);
}
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import kernel
+
+class A
+ var foo: Int is
+ # Documentation
+ deprecated
+ end
+
+ fun bar is
+ deprecated
+ do
+ foo.output
+ bar
+ baz
+ end
+
+ fun baz
+ do
+ foo.output
+ bar
+ baz
+ end
+
+ #alt1#redef fun output is deprecated do end
+end
--- /dev/null
+--diagram package --private ./base_prot_sig2.nit -I ../lib/standard
+--diagram package ./base_prot_sig2.nit -I ../lib/standard
+--diagram class --private ./base_prot_sig2.nit -I ../lib/standard
+--diagram class ./base_prot_sig2.nit -I ../lib/standard
-base_control_flow2.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-base_control_flow2.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-base_control_flow2.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-base_control_flow2.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+base_control_flow2.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+base_control_flow2.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+base_control_flow2.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+base_control_flow2.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
alt/base_control_flow2_alt1.nit:24,2: Error: unreachable statement.
-alt/base_control_flow2_alt1.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt1.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt1.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt1.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt1.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt1.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt1.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt1.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
-alt/base_control_flow2_alt2.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt2.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
alt/base_control_flow2_alt2.nit:30,2: Error: unreachable statement.
-alt/base_control_flow2_alt2.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt2.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt2.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt2.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt2.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt2.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
-alt/base_control_flow2_alt3.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt3.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
alt/base_control_flow2_alt3.nit:42,2: Error: unreachable statement.
-alt/base_control_flow2_alt3.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt3.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt3.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt3.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt3.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt3.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
-alt/base_control_flow2_alt4.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt4.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt4.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt4.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
alt/base_control_flow2_alt4.nit:50,3: Error: unreachable statement.
-alt/base_control_flow2_alt4.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt4.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt4.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt4.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
-alt/base_control_flow2_alt5.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt5.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt5.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt5.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt5.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt5.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
alt/base_control_flow2_alt5.nit:54,2: Error: unreachable statement.
-alt/base_control_flow2_alt5.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt5.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
-alt/base_control_flow2_alt6.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt6.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt6.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt6.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt6.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt6.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt6.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt6.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
alt/base_control_flow2_alt6.nit:60,2: Error: unreachable statement.
-alt/base_control_flow2_alt7.nit:21,1--25,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt7.nit:39,1--43,3: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt7.nit:47,2--51,4: Warning: use 'loop' instead of 'while true do'.
-alt/base_control_flow2_alt7.nit:45,1--55,3: Warning: use 'loop' instead of 'while true do'.
+alt/base_control_flow2_alt7.nit:21,1--25,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt7.nit:39,1--43,3: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt7.nit:47,2--51,4: Warning: use `loop` instead of `while true do`.
+alt/base_control_flow2_alt7.nit:45,1--55,3: Warning: use `loop` instead of `while true do`.
alt/base_control_flow2_alt7.nit:67,2: Error: unreachable statement.
--- /dev/null
+base_deprecated.nit:33,3--5: Deprecation Warning: Method 'foo' is deprecated: Documentation
+base_deprecated.nit:34,3--5: Deprecation Warning: Method 'bar' is deprecated.
--- /dev/null
+alt/base_deprecated_alt1.nit:38,12--17: Error: method redefinition cannot be deprecated.
error_expr_not_ok.nit:66,7--10: Error: Method or variable 'fail' unknown in Sys.
error_expr_not_ok.nit:66,21: Type error: expected A, got Int
error_expr_not_ok.nit:67,15--18: Error: Method or variable 'fail' unknown in Sys.
-error_expr_not_ok.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+error_expr_not_ok.nit:67,1--18: Warning: use `loop` instead of `while true do`.
error_expr_not_ok.nit:69,10--13: Error: Method or variable 'fail' unknown in Sys.
error_expr_not_ok.nit:70,20--23: Error: Method or variable 'fail' unknown in Sys.
error_expr_not_ok.nit:71,8--11: Error: Method or variable 'fail' unknown in Sys.
alt/error_expr_not_ok_alt2.nit:60,20: Type error: expected A, got Int
alt/error_expr_not_ok_alt2.nit:62,7--27: Type error: expected A, got Int
alt/error_expr_not_ok_alt2.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt2.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt2.nit:67,1--18: Warning: use `loop` instead of `while true do`.
alt/error_expr_not_ok_alt2.nit:73,7--18: Type error: expected A, got Bool
alt/error_expr_not_ok_alt2.nit:74,7--18: Type error: expected A, got Bool
alt/error_expr_not_ok_alt2.nit:75,7--18: Type error: expected A, got Bool
alt/error_expr_not_ok_alt3.nit:60,20: Type error: expected A, got Int
alt/error_expr_not_ok_alt3.nit:62,7--27: Type error: expected A, got Int
alt/error_expr_not_ok_alt3.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt3.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt3.nit:67,1--18: Warning: use `loop` instead of `while true do`.
alt/error_expr_not_ok_alt3.nit:73,7--18: Type error: expected A, got Bool
alt/error_expr_not_ok_alt3.nit:74,7--18: Type error: expected A, got Bool
alt/error_expr_not_ok_alt3.nit:75,7--18: Type error: expected A, got Bool
alt/error_expr_not_ok_alt4.nit:64,7--33: Type error: expected A, got Int
alt/error_expr_not_ok_alt4.nit:66,7--10: Type error: expected Bool, got Int
alt/error_expr_not_ok_alt4.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt4.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt4.nit:67,1--18: Warning: use `loop` instead of `while true do`.
alt/error_expr_not_ok_alt4.nit:69,24: Type error: expected A, got Int
alt/error_expr_not_ok_alt4.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
alt/error_expr_not_ok_alt4.nit:69,1--25: Error: Method 'iterator' doesn't exists in Int.
alt/error_expr_not_ok_alt5.nit:64,7--33: Type error: expected A, got Int
alt/error_expr_not_ok_alt5.nit:66,7--10: Type error: expected Bool, got Int
alt/error_expr_not_ok_alt5.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt5.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt5.nit:67,1--18: Warning: use `loop` instead of `while true do`.
alt/error_expr_not_ok_alt5.nit:69,24: Type error: expected A, got Int
alt/error_expr_not_ok_alt5.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
alt/error_expr_not_ok_alt5.nit:69,1--25: Error: Method 'iterator' doesn't exists in Int.
alt/error_expr_not_ok_alt6.nit:64,7--33: Type error: expected A, got Int
alt/error_expr_not_ok_alt6.nit:66,7--10: Type error: expected Bool, got Int
alt/error_expr_not_ok_alt6.nit:66,21: Type error: expected A, got Int
-alt/error_expr_not_ok_alt6.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
+alt/error_expr_not_ok_alt6.nit:67,1--18: Warning: use `loop` instead of `while true do`.
alt/error_expr_not_ok_alt6.nit:69,24: Type error: expected A, got Int
alt/error_expr_not_ok_alt6.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
alt/error_expr_not_ok_alt6.nit:69,1--25: Error: Method 'iterator' doesn't exists in Int.
error_fun_ret4.nit:17,5--8: Control error: Reached end of function (a 'return' with a value was expected).
-error_fun_ret4.nit:19,2--22,4: Warning: use 'loop' instead of 'while true do'.
+error_fun_ret4.nit:19,2--22,4: Warning: use `loop` instead of `while true do`.
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import end
+intrude import standard::kernel
+private import standard::string
+
+`{`}
+
+`{
+#ifdef truc
+ #undef truc
+#endif
+`}
+
+in "C headers" `{
+ #include <errno.h>
+`}
+
+fun err: Int is extern `{ return 1; `}
+
+fun errno: Int is extern `{
+ return errno;
+`}
+
+fun errnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo: Int is extern `{
+ return errno;
+`}
+
+private class A
+ var my_attr = 1234
+
+ fun baz(msg: String) import String.length, String.to_cstring, my_attr, my_attr= `{
+ char *c_msg;
+ int msg_len;
+
+ /* String_to_cstring isa a allback to msg.to_cstring */
+ c_msg = String_to_cstring( msg );
+
+ /* String_length is a callback to msg.length */
+ msg_len = String_length( msg );
+
+ printf( "received msg: %s, of length = %d\n", c_msg, msg_len );
+
+ /* A_my_attr is a callback to the getter of self.my_attr */
+ printf( "old attr %d\n", A_my_attr(recv) );
+
+ if(chose)
+ truc;
+ else
+ chose;
+
+ /* A_my_attr is a callback to the setter of self.my_attr= */
+ A_my_attr__assign( recv, msg_len );
+ `}
+end
+
+extern class TimeT `{time_t`}
+ new `{ return time(NULL); `}
+ new from_i(i: Int) `{ return i; `}
+ fun update `{ time(&recv); `}
+
+ fun ctime: String import NativeString.to_s_with_copy `{
+ return NativeString_to_s_with_copy( ctime(&recv) );
+ `}
+
+ # Difference in secondes from start (self if the end time)
+ fun difftime(start: TimeT): Float `{ return difftime(recv, start); `}
+
+ private fun intern_poll(in_fds: Array[Int], out_fds: Array[Int]): nullable Int is import
+ Array[Int].length, Array[Int].[], Int.as(nullable Int) `{`}
+end
+
+fun address_is_null: Bool is extern "address_is_null"
+
+fun free `{ free(recv); `}
Usage: nit [OPTION]... <file.nit>...
-Interprets and debbugs Nit programs.
+Interprets and debugs Nit programs.
Use --help for help
</span><span class="line" id="L23"><span class="nc_k">end</span>
</span></span><span class="line" id="L24">
</span><span class="nc_cdef foldable" id="base_simple3#Int"><span class="line" id="L25"><span class="nc_k">enum</span> <span class="nc_def nc_t popupable" title="class Int" data-title="<a href="base_simple3.html#base_simple3#Int">class Int</a>" data-content="<div><b>class</b> <span>Int</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3#Object">Object</a></li></ul></div></div>" data-toggle="popover">Int</span>
-</span><span class="nc_pdef foldable" id="base_simple3#Int#output"><span class="line" id="L26"> <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3#Int#output" data-title="<a href="base_simple3.html#base_simple3#Int#output">base_simple3#Int#output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_k">intern</span>
+</span><span class="nc_pdef foldable" id="base_simple3#Int#output"><span class="line" id="L26"> <span class="nc_k">fun</span> <span class="nc_def popupable" title="base_simple3#Int#output" data-title="<a href="base_simple3.html#base_simple3#Int#output">base_simple3#Int#output</a>" data-content="<div><b>fun</b> <span>output<span></span></span><br/></div>" data-toggle="popover"><span class="nc_i">output</span></span> <span class="nc_k">is</span> <span class="nc_i">intern</span>
</span></span><span class="line" id="L27"><span class="nc_k">end</span>
</span></span><span class="line" id="L28">
</span><span class="nc_cdef foldable" id="base_simple3#A"><span class="line" id="L29"><span class="nc_k">class</span> <span class="nc_def nc_t popupable" title="class A" data-title="<a href="base_simple3.html#base_simple3#A">class A</a>" data-content="<div><b>class</b> <span>A</span><br/><div class="dropdown"> <a data-toggle="dropdown" href="#"><b>hier</b> super-classes<span class="caret"></span></a><ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"><li><a href="base_simple3.html#base_simple3#Object">Object</a></li></ul></div></div>" data-toggle="popover">A</span>
--- /dev/null
+usage: nitmd <file.md>
<=8: sub-population=1 (14.28%); cumulated value=6 (100.00%)
--- AST Metrics ---
## All nodes of the AST
- population: 47
+ population: 48
minimum value: 1
- maximum value: 39
- total value: 256
- average value: 5.44
+ maximum value: 40
+ total value: 261
+ average value: 5.43
distribution:
- <=1: sub-population=13 (27.65%); cumulated value=13 (5.07%)
- <=2: sub-population=6 (12.76%); cumulated value=12 (4.68%)
- <=4: sub-population=10 (21.27%); cumulated value=32 (12.50%)
- <=8: sub-population=10 (21.27%); cumulated value=61 (23.82%)
- <=16: sub-population=4 (8.51%); cumulated value=44 (17.18%)
- <=32: sub-population=3 (6.38%); cumulated value=55 (21.48%)
- <=64: sub-population=1 (2.12%); cumulated value=39 (15.23%)
+ <=1: sub-population=15 (31.25%); cumulated value=15 (5.74%)
+ <=2: sub-population=5 (10.41%); cumulated value=10 (3.83%)
+ <=4: sub-population=10 (20.83%); cumulated value=32 (12.26%)
+ <=8: sub-population=10 (20.83%); cumulated value=64 (24.52%)
+ <=16: sub-population=4 (8.33%); cumulated value=44 (16.85%)
+ <=32: sub-population=3 (6.25%); cumulated value=56 (21.45%)
+ <=64: sub-population=1 (2.08%); cumulated value=40 (15.32%)
list:
- TId: 39 (15.23%)
- AListExprs: 19 (7.42%)
- APublicVisibility: 18 (7.03%)
- ACallExpr: 18 (7.03%)
- TClassid: 15 (5.85%)
- TNumber: 10 (3.90%)
- ADecIntExpr: 10 (3.90%)
- AType: 9 (3.51%)
- TKwend: 8 (3.12%)
- ASignature: 8 (3.12%)
+ TId: 40 (15.32%)
+ APublicVisibility: 19 (7.27%)
+ AListExprs: 19 (7.27%)
+ ACallExpr: 18 (6.89%)
+ TClassid: 15 (5.74%)
+ TNumber: 10 (3.83%)
+ ADecIntExpr: 10 (3.83%)
+ AType: 9 (3.44%)
+ TKwend: 8 (3.06%)
+ ASignature: 8 (3.06%)
...
- AModule: 1 (0.39%)
- ACallAssignExpr: 1 (0.39%)
- AMainClassdef: 1 (0.39%)
- AReturnExpr: 1 (0.39%)
- TKwreturn: 1 (0.39%)
- TKwinterface: 1 (0.39%)
- ANoImport: 1 (0.39%)
- AInterfaceClasskind: 1 (0.39%)
- AMainMethPropdef: 1 (0.39%)
- TKwimport: 1 (0.39%)
+ ACallAssignExpr: 1 (0.38%)
+ AAnnotations: 1 (0.38%)
+ AReturnExpr: 1 (0.38%)
+ TKwreturn: 1 (0.38%)
+ AInterfaceClasskind: 1 (0.38%)
+ TKwinterface: 1 (0.38%)
+ ANoImport: 1 (0.38%)
+ AMainMethPropdef: 1 (0.38%)
+ AMainClassdef: 1 (0.38%)
+ TKwimport: 1 (0.38%)
## All identifiers of the AST
- population: 19
+ population: 20
minimum value: 1
maximum value: 11
- total value: 54
- average value: 2.84
+ total value: 55
+ average value: 2.75
distribution:
- <=1: sub-population=2 (10.52%); cumulated value=2 (3.70%)
- <=2: sub-population=12 (63.15%); cumulated value=24 (44.44%)
- <=4: sub-population=3 (15.78%); cumulated value=10 (18.51%)
- <=8: sub-population=1 (5.26%); cumulated value=7 (12.96%)
- <=16: sub-population=1 (5.26%); cumulated value=11 (20.37%)
+ <=1: sub-population=3 (15.00%); cumulated value=3 (5.45%)
+ <=2: sub-population=12 (60.00%); cumulated value=24 (43.63%)
+ <=4: sub-population=3 (15.00%); cumulated value=10 (18.18%)
+ <=8: sub-population=1 (5.00%); cumulated value=7 (12.72%)
+ <=16: sub-population=1 (5.00%); cumulated value=11 (20.00%)
list:
- output: 11 (20.37%)
- Int: 7 (12.96%)
- run: 4 (7.40%)
- c: 3 (5.55%)
- val: 3 (5.55%)
- i: 2 (3.70%)
- bar: 2 (3.70%)
- foo: 2 (3.70%)
- val2: 2 (3.70%)
- val1: 2 (3.70%)
- C: 2 (3.70%)
- v: 2 (3.70%)
- baz: 2 (3.70%)
- a: 2 (3.70%)
- A: 2 (3.70%)
- B: 2 (3.70%)
- b: 2 (3.70%)
- Object: 1 (1.85%)
- Bool: 1 (1.85%)
+ output: 11 (20.00%)
+ Int: 7 (12.72%)
+ run: 4 (7.27%)
+ c: 3 (5.45%)
+ val: 3 (5.45%)
+ i: 2 (3.63%)
+ bar: 2 (3.63%)
+ foo: 2 (3.63%)
+ val2: 2 (3.63%)
+ val1: 2 (3.63%)
+ C: 2 (3.63%)
+ v: 2 (3.63%)
+ baz: 2 (3.63%)
+ a: 2 (3.63%)
+ A: 2 (3.63%)
+ B: 2 (3.63%)
+ b: 2 (3.63%)
+ intern: 1 (1.81%)
+ Object: 1 (1.81%)
+ Bool: 1 (1.81%)
--- Metrics of refinement usage ---
Number of modules: 1
--- /dev/null
+Usage: nitpick [OPTION]... <file.nit>...
+Collect potential style and code issues.
+Use --help for help
var d: Int = 10
# Test test...
- var e: Int writable
+ var e: Int is writable
- var f: Int protected writable
+ var f: Int is protected writable
# Adoc
- var k: Int protected writable = 10
+ var k: Int = 10 is protected writable
# more comments
end # end
# limitations under the License.
class Foo
- var _a: Int
- private var _b: nullable Int
- protected var _c = 10
- var _d: Int = 10
+ var a: Int
+ private var b: nullable Int
+ protected var c = 10
+ var d: Int = 10
end
var foo = new Foo(1, 2)
--- /dev/null
+Usage: [OPTION]... [ARG]...
+Use --help for help
--- /dev/null
+digraph G {
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ node [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ shape = "record"
+ ]
+ edge [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ ]
+subgraph clusterbase_prot_sig2 {
+label = "base_prot_sig2"
+base_prot_sig2C [
+ label = "{C|- _vpriA: nullable A\l- _vpriA2: A\l|- priA(a: A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l+ init()\l}"color="#58B26A"
+]
+base_prot_sig2D [
+ label = "{D|- _vpubA: nullable A\l- _vpriA: nullable A\l- _vpubA2: A\l- _vpriA2: A\l|- pubA(a: A)\l- priA(a: A)\l- vpubA(): nullable A\l- vpubA=(vpubA: nullable A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpubA2(): A\l- vpubA2=(vpubA2: A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l+ init()\l}"color="#58B26A"
+]
+}
+}
--- /dev/null
+digraph G {
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ node [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ shape = "record"
+ ]
+ edge [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ ]
+subgraph clusterbase_prot_sig2 {
+label = "base_prot_sig2"
+base_prot_sig2C [
+ label = "{C||+ init()\l}"color="#58B26A"
+]
+}
+}
--- /dev/null
+digraph G {
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ node [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ shape = "record"
+ ]
+
+ edge [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ ]
+Object [
+ label = "{interface\nObject||+ object_id(): Int\l+ is_same_type(other: Object): Bool\l+ is_same_instance(other: nullable Object): Bool\l+ ==(other: nullable Object): Bool\l+ !=(other: nullable Object): Bool\l+ output()\l+ output_class_name()\l+ hash(): Int\l+ exit(exit_value: Int)\l+ sys(): Sys\l}"
+]
+
+Sys [
+ label = "{Sys||+ main()\l+ run()\l+ errno(): Int\l}"
+]
+Object -> Sys [dir=back arrowtail=open style=dashed];
+
+Comparable [
+ label = "{interface\nComparable||+ \<(other: OTHER): Bool\l+ \<=(other: OTHER): Bool\l+ \>=(other: OTHER): Bool\l+ \>(other: OTHER): Bool\l+ \<=\>(other: OTHER): Int\l+ is_between(c: OTHER, d: OTHER): Bool\l+ max(other: OTHER): OTHER\l+ min(c: OTHER): OTHER\l}"
+]
+Object -> Comparable [dir=back arrowtail=open style=dashed];
+
+Discrete [
+ label = "{interface\nDiscrete||+ successor(i: Int): OTHER\l+ predecessor(i: Int): OTHER\l+ distance(d: OTHER): Int\l}"
+]
+Comparable -> Discrete [dir=back arrowtail=open style=dashed];
+
+Numeric [
+ label = "{interface\nNumeric||+ +(i: OTHER): OTHER\l+ -(i: OTHER): OTHER\l+ unary -(): OTHER\l+ *(i: OTHER): OTHER\l+ /(i: OTHER): OTHER\l+ to_i(): Int\l+ to_f(): Float\l+ is_zero(): Bool\l+ zero(): OTHER\l+ value_of(val: Numeric): OTHER\l}"
+]
+Comparable -> Numeric [dir=back arrowtail=open style=dashed];
+
+Bool [
+ label = "{Bool||+ to_i(): Int\l}"
+]
+Object -> Bool [dir=back arrowtail=open style=dashed];
+
+Float [
+ label = "{Float||}"
+]
+Numeric -> Float [dir=back arrowtail=open style=dashed];
+
+Int [
+ label = "{Int||+ %(i: Int): Int\l+ lshift(i: Int): Int\l+ rshift(i: Int): Int\l+ ascii(): Char\l+ digit_count(b: Int): Int\l+ digit_count_base_10(): Int\l+ to_c(): Char\l+ abs(): Int\l}"
+]
+Discrete -> Int [dir=back arrowtail=open style=dashed];
+Numeric -> Int [dir=back arrowtail=open style=dashed];
+
+Char [
+ label = "{Char||+ to_i(): Int\l+ ascii(): Int\l+ to_lower(): Char\l+ to_upper(): Char\l+ is_digit(): Bool\l+ is_lower(): Bool\l+ is_upper(): Bool\l+ is_letter(): Bool\l}"
+]
+Discrete -> Char [dir=back arrowtail=open style=dashed];
+
+Pointer [
+ label = "{Pointer||+ address_is_null(): Bool\l+ free()\l}"
+]
+Object -> Pointer [dir=back arrowtail=open style=dashed];
+
+A [
+ label = "{A|- _vpubA: nullable A\l- _vproA: nullable A\l- _vpriA: nullable A\l- _vpubA2: A\l- _vproA2: A\l- _vpriA2: A\l- _vpriB: nullable B\l- _vpriB2: B\l|+ pubA(a: A)\l# proA(a: A)\l- priA(a: A)\l+ vpubA(): nullable A\l+ vpubA=(vpubA: nullable A)\l# vproA(): nullable A\l# vproA=(vproA: nullable A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l+ vpubA2(): A\l+ vpubA2=(vpubA2: A)\l# vproA2(): A\l# vproA2=(vproA2: A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l- priB(a: B)\l- vpriB(): nullable B\l- vpriB=(vpriB: nullable B)\l- vpriB2(): B\l- vpriB2=(vpriB2: B)\l}"
+]
+Object -> A [dir=back arrowtail=open style=dashed];
+
+B [
+ label = "{B|- _vpubA: nullable A\l- _vpriA: nullable A\l- _vpubA2: A\l- _vpriA2: A\l- _vpubB: nullable B\l- _vpriB: nullable B\l- _vpubB2: B\l- _vpriB2: B\l|- pubA(a: A)\l- priA(a: A)\l- vpubA(): nullable A\l- vpubA=(vpubA: nullable A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpubA2(): A\l- vpubA2=(vpubA2: A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l- pubB(a: B)\l- priB(a: B)\l- vpubB(): nullable B\l- vpubB=(vpubB: nullable B)\l- vpriB(): nullable B\l- vpriB=(vpriB: nullable B)\l- vpubB2(): B\l- vpubB2=(vpubB2: B)\l- vpriB2(): B\l- vpriB2=(vpriB2: B)\l}"
+]
+Object -> B [dir=back arrowtail=open style=dashed];
+
+C [
+ label = "{C|- _vpriA: nullable A\l- _vpriA2: A\l|- priA(a: A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l}"
+]
+Object -> C [dir=back arrowtail=open style=dashed];
+
+D [
+ label = "{D|- _vpubA: nullable A\l- _vpriA: nullable A\l- _vpubA2: A\l- _vpriA2: A\l|- pubA(a: A)\l- priA(a: A)\l- vpubA(): nullable A\l- vpubA=(vpubA: nullable A)\l- vpriA(): nullable A\l- vpriA=(vpriA: nullable A)\l- vpubA2(): A\l- vpubA2=(vpubA2: A)\l- vpriA2(): A\l- vpriA2=(vpriA2: A)\l}"
+]
+Object -> D [dir=back arrowtail=open style=dashed];
+
+}
--- /dev/null
+digraph G {
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ node [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ shape = "record"
+ ]
+
+ edge [
+ fontname = "Bitstream Vera Sans"
+ fontsize = 8
+ ]
+Object [
+ label = "{interface\nObject||+ object_id(): Int\l+ is_same_type(other: Object): Bool\l+ is_same_instance(other: nullable Object): Bool\l+ ==(other: nullable Object): Bool\l+ !=(other: nullable Object): Bool\l+ output()\l+ output_class_name()\l+ hash(): Int\l+ exit(exit_value: Int)\l+ sys(): Sys\l}"
+]
+
+Sys [
+ label = "{Sys||+ main()\l+ run()\l+ errno(): Int\l}"
+]
+Object -> Sys [dir=back arrowtail=open style=dashed];
+
+Comparable [
+ label = "{interface\nComparable||+ \<(other: OTHER): Bool\l+ \<=(other: OTHER): Bool\l+ \>=(other: OTHER): Bool\l+ \>(other: OTHER): Bool\l+ \<=\>(other: OTHER): Int\l+ is_between(c: OTHER, d: OTHER): Bool\l+ max(other: OTHER): OTHER\l+ min(c: OTHER): OTHER\l}"
+]
+Object -> Comparable [dir=back arrowtail=open style=dashed];
+
+Discrete [
+ label = "{interface\nDiscrete||+ successor(i: Int): OTHER\l+ predecessor(i: Int): OTHER\l+ distance(d: OTHER): Int\l}"
+]
+Comparable -> Discrete [dir=back arrowtail=open style=dashed];
+
+Numeric [
+ label = "{interface\nNumeric||+ +(i: OTHER): OTHER\l+ -(i: OTHER): OTHER\l+ unary -(): OTHER\l+ *(i: OTHER): OTHER\l+ /(i: OTHER): OTHER\l+ to_i(): Int\l+ to_f(): Float\l+ is_zero(): Bool\l+ zero(): OTHER\l+ value_of(val: Numeric): OTHER\l}"
+]
+Comparable -> Numeric [dir=back arrowtail=open style=dashed];
+
+Bool [
+ label = "{Bool||+ to_i(): Int\l}"
+]
+Object -> Bool [dir=back arrowtail=open style=dashed];
+
+Float [
+ label = "{Float||}"
+]
+Numeric -> Float [dir=back arrowtail=open style=dashed];
+
+Int [
+ label = "{Int||+ %(i: Int): Int\l+ lshift(i: Int): Int\l+ rshift(i: Int): Int\l+ ascii(): Char\l+ digit_count(b: Int): Int\l+ digit_count_base_10(): Int\l+ to_c(): Char\l+ abs(): Int\l}"
+]
+Discrete -> Int [dir=back arrowtail=open style=dashed];
+Numeric -> Int [dir=back arrowtail=open style=dashed];
+
+Char [
+ label = "{Char||+ to_i(): Int\l+ ascii(): Int\l+ to_lower(): Char\l+ to_upper(): Char\l+ is_digit(): Bool\l+ is_lower(): Bool\l+ is_upper(): Bool\l+ is_letter(): Bool\l}"
+]
+Discrete -> Char [dir=back arrowtail=open style=dashed];
+
+Pointer [
+ label = "{Pointer||+ address_is_null(): Bool\l+ free()\l}"
+]
+Object -> Pointer [dir=back arrowtail=open style=dashed];
+
+A [
+ label = "{A||+ pubA(a: A)\l+ vpubA(): nullable A\l+ vpubA=(vpubA: nullable A)\l+ vpubA2(): A\l+ vpubA2=(vpubA2: A)\l}"
+]
+Object -> A [dir=back arrowtail=open style=dashed];
+
+C [
+ label = "{C||}"
+]
+Object -> C [dir=back arrowtail=open style=dashed];
+
+}
--- /dev/null
+alt/test_ffi_c_polymorphism_alt1.nit:56,15--25: Type error: expected NativeB, got NativeA
--- /dev/null
+alt/test_ffi_c_polymorphism_alt2.nit:58,12--22: Type error: expected NativeB, got NativeA
-mprojects:
+# mprojects:
test_prog
+------------------------------------
test_prog
-mmodules:
+
+# mmodules:
careers character combat game platform races rpg test_prog
+------------------------------------
careers character combat game platform races rpg test_prog
-mclasses:
+
+# mclasses:
Alcoholic Bool Career Character Combatable Dwarf Elf Float Game Human Int List Magician Object Race Starter String Sys Warrior Weapon
+------------------------------------
Alcoholic Bool Career Character Combatable Dwarf Elf Float Game Human Int List Magician Object Race Starter String Sys Warrior Weapon
-mproperties:
+
+# mproperties:
!= * * + + - - / / == > > OTHER _age _base_endurance _base_intelligence _base_strength _career _endurance_bonus _health _intelligence_bonus _name _race _sex _strength_bonus age age= attack base_endurance base_endurance= base_intelligence base_intelligence= base_strength base_strength= career career= computer_characters defend direct_attack dps endurance_bonus endurance_bonus= health health= hit_points init intelligence_bonus intelligence_bonus= is_dead main max_health name name= pause_game player_characters quit race race= sex sex= start start_game stop_game strength_bonus strength_bonus= to_f total_endurance total_intelligence total_strengh unary -
+------------------------------------
!= * * + + - - / / == > > OTHER _age _base_endurance _base_intelligence _base_strength _career _endurance_bonus _health _intelligence_bonus _name _race _sex _strength_bonus age age= attack base_endurance base_endurance= base_intelligence base_intelligence= base_strength base_strength= career career= computer_characters defend direct_attack dps endurance_bonus endurance_bonus= health health= hit_points init intelligence_bonus intelligence_bonus= is_dead main max_health name name= pause_game player_characters quit race race= sex sex= start start_game stop_game strength_bonus strength_bonus= to_f total_endurance total_intelligence total_strengh unary -
+
+# msignatures:
+!=(other: OTHER): Bool
+*(f: Float): Float
+*(i: Int): Int
++(f: Float): Float
++(i: Int): Int
+-(i: Int): Int
+-(f: Float): Float
+/(f: Float): Float
+/(i: Int): Int
+==(other: OTHER): Bool
+>(f: Float): Bool
+>(i: Int): Bool
+age: Int
+age=(age: Int)
+attack(target: Combatable, weapon: Weapon): Int
+base_endurance: Int
+base_endurance=(base_endurance: Int)
+base_intelligence: Int
+base_intelligence=(base_intelligence: Int)
+base_strength: Int
+base_strength=(base_strength: Int)
+career: nullable Career
+career=(career: nullable Career)
+computer_characters: List[Character]
+defend(hit: Int): Int
+direct_attack(target: Combatable, weapon: Weapon): Int
+dps: Float
+endurance_bonus: Int
+endurance_bonus=(endurance_bonus: Int)
+health: Int
+health=(health: Int)
+hit_points: Int
+init
+intelligence_bonus: Int
+intelligence_bonus=(intelligence_bonus: Int)
+is_dead: Bool
+main
+max_health: Int
+name: String
+name=(name: String)
+pause_game
+player_characters: List[Character]
+quit
+race: Race
+race=(race: Race)
+sex: Bool
+sex=(sex: Bool)
+start
+start_game
+stop_game
+strength_bonus: Int
+strength_bonus=(strength_bonus: Int)
+to_f: Float
+total_endurance: Int
+total_intelligence: Int
+total_strengh: Int
+unary -: Int
+------------------------------------
+!=(other: OTHER): Bool
+*(f: Float): Float
+*(i: Int): Int
++(f: Float): Float
++(i: Int): Int
+-(i: Int): Int
+-(f: Float): Float
+/(f: Float): Float
+/(i: Int): Int
+==(other: OTHER): Bool
+>(f: Float): Bool
+>(i: Int): Bool
+age: Int
+age=(age: Int)
+attack(target: Combatable, weapon: Weapon): Int
+base_endurance: Int
+base_endurance=(base_endurance: Int)
+base_intelligence: Int
+base_intelligence=(base_intelligence: Int)
+base_strength: Int
+base_strength=(base_strength: Int)
+career: nullable Career
+career=(career: nullable Career)
+computer_characters: List[Character]
+defend(hit: Int): Int
+direct_attack(target: Combatable, weapon: Weapon): Int
+dps: Float
+endurance_bonus: Int
+endurance_bonus=(endurance_bonus: Int)
+health: Int
+health=(health: Int)
+hit_points: Int
+init
+intelligence_bonus: Int
+intelligence_bonus=(intelligence_bonus: Int)
+is_dead: Bool
+main
+max_health: Int
+name: String
+name=(name: String)
+pause_game
+player_characters: List[Character]
+quit
+race: Race
+race=(race: Race)
+sex: Bool
+sex=(sex: Bool)
+start
+start_game
+stop_game
+strength_bonus: Int
+strength_bonus=(strength_bonus: Int)
+to_f: Float
+total_endurance: Int
+total_intelligence: Int
+total_strengh: Int
+unary -: Int
TClassid "Int" ../src/test_parser.nit:25,20--22
ADecIntExpr ../src/test_parser.nit:25,26
TNumber "0" ../src/test_parser.nit:25,26
- AConcreteMethPropdef ../src/test_parser.nit:26,2--36,4
+ AMethPropdef ../src/test_parser.nit:26,2--36,4
TKwredef "redef" ../src/test_parser.nit:26,2--6
APublicVisibility ../src/test_parser.nit:26,8
TKwmeth "fun" ../src/test_parser.nit:26,8--10
AListExprs 1,15
--> AModule 1,1--12
ATopClassdef 1,1--12
- AConcreteMethPropdef 1,1--12
+ AMethPropdef 1,1--12
APublicVisibility 1,1
TKwmeth "fun" 1,1--3
AIdMethid 1,5--7
TKwend "end" 3,1--3
--> ... ... ... ... AModule 1,1--5,3
ATopClassdef 1,1--5,3
- AConcreteMethPropdef 1,1--5,3
+ AMethPropdef 1,1--5,3
APublicVisibility 1,1
TKwmeth "fun" 1,1--3
AIdMethid 1,5--7
-test_return.nit:45,2--47,4: Warning: use 'loop' instead of 'while true do'.
+test_return.nit:45,2--47,4: Warning: use `loop` instead of `while true do`.
1
1
1
--- /dev/null
+../examples/nitcorn/src/xymus_net.nit:24,8--14: Error: cannot find module tnitter from nitcorn. tried alt, ../lib, ../examples/nitcorn
+../examples/nitcorn/src/xymus_net.nit:25,8--26: Error: cannot find module benitlux_controller from nitcorn. tried alt, ../lib, ../examples/nitcorn
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+extern class NativeA
+ new `{ return NULL; `}
+ fun foo do print "a"
+end
+
+extern class NativeB
+ super NativeA
+ new `{ return NULL; `}
+ redef fun foo do print "b"
+end
+
+extern class NativeC
+ super NativeA
+ new `{ return NULL; `}
+ redef fun foo do print "c"
+end
+
+class A
+ type NATIVE: NativeA
+ var native: NATIVE
+end
+
+class B
+ super A
+ redef type NATIVE: NativeB
+end
+
+class C
+ super A
+ redef type NATIVE: NativeC
+end
+
+for a in [new A(new NativeA), new B(new NativeB), new C(new NativeC)] do
+ a.native.foo
+end
+
+var a = new A(new NativeA)
+var b = new A(new NativeB)
+var c = new B(new NativeB)
+#alt1# var d = new B(new NativeA)
+a.native = new NativeB
+#alt2# c.native = new NativeA
# Test test...
- var e: Int writable
- var f: Int protected writable
+ var e: Int is writable
+ var f: Int is protected writable
# Adoc
-var k: Int protected writable = 10
+var k: Int = 10 is protected writable
# limitations under the License.
class Foo
- var _a: Int
- private var _b: nullable Int
- protected var _c = 10
- var _d: Int = 10
+ var a: Int
+ private var b: nullable Int
+ protected var c = 10
+ var d: Int = 10
end
var foo = new Foo(1, 2)
# The current `Career` of the character.
# Returns `null` if character is unemployed.
- var career: nullable Career writable = null
+ var career: nullable Career = null is writable
fun quit do
career = null