From: Jean Privat Date: Thu, 25 Sep 2014 02:08:12 +0000 (-0400) Subject: Merge: App.nit Data Store X-Git-Tag: v0.6.9~20 X-Git-Url: http://nitlanguage.org?hp=d37a0558aeb6ad15b9b42a3bbcf53a7ea2fd001e Merge: App.nit Data Store 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 Reviewed-by: Jean Privat Reviewed-by: Romain Chanoir Reviewed-by: Frédéric Vachon --- diff --git a/Makefile b/Makefile index e52265e..636e0ce 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ doc/stdlib/index.html: bin/nitdoc bin/nitls @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 "Nitlanguage.org" \ --custom-overview-text "

Documentation for the standard library of Nit
Version $$(git describe)
Date: $$(git show --format="%cd" | head -1)

" \ @@ -52,8 +52,8 @@ doc/stdlib/index.html: bin/nitdoc bin/nitls --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 "Nitlanguage.org" \ diff --git a/contrib/benitlux/.gitignore b/contrib/benitlux/.gitignore new file mode 100644 index 0000000..e4e2a7d --- /dev/null +++ b/contrib/benitlux/.gitignore @@ -0,0 +1,3 @@ +src/benitlux_serial.nit +*.db +*.email diff --git a/contrib/benitlux/Makefile b/contrib/benitlux/Makefile new file mode 100644 index 0000000..4dcab2d --- /dev/null +++ b/contrib/benitlux/Makefile @@ -0,0 +1,8 @@ +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 diff --git a/contrib/benitlux/README.md b/contrib/benitlux/README.md new file mode 100644 index 0000000..db4c127 --- /dev/null +++ b/contrib/benitlux/README.md @@ -0,0 +1,34 @@ +Benitlux is an unofficial mailing list to keep faithful bargoers informed of the current beer offer at the excellent Brasserie Bénélux . + +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 + +# 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 + +# 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 diff --git a/contrib/benitlux/src/benitlux_controller.nit b/contrib/benitlux/src/benitlux_controller.nit new file mode 100644 index 0000000..84ae549 --- /dev/null +++ b/contrib/benitlux/src/benitlux_controller.nit @@ -0,0 +1,125 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 diff --git a/contrib/benitlux/src/benitlux_daily.nit b/contrib/benitlux/src/benitlux_daily.nit new file mode 100644 index 0000000..8121683 --- /dev/null +++ b/contrib/benitlux/src/benitlux_daily.nit @@ -0,0 +1,240 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 `
`) 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 = "

Bières

" + var ender = "" + + 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("
\n")}}} +

+To unsubscribe, go to {{{unsub_link}}} +""" + + var mail = new Mail("Benitlux ", 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) diff --git a/contrib/benitlux/src/benitlux_db.nit b/contrib/benitlux/src/benitlux_db.nit new file mode 100644 index 0000000..05a1a81 --- /dev/null +++ b/contrib/benitlux/src/benitlux_db.nit @@ -0,0 +1,149 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 diff --git a/contrib/benitlux/src/benitlux_model.nit b/contrib/benitlux/src/benitlux_model.nit new file mode 100644 index 0000000..57cb34e --- /dev/null +++ b/contrib/benitlux/src/benitlux_model.nit @@ -0,0 +1,93 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 diff --git a/contrib/benitlux/src/benitlux_view.nit b/contrib/benitlux/src/benitlux_view.nit new file mode 100644 index 0000000..d35d6d9 --- /dev/null +++ b/contrib/benitlux/src/benitlux_view.nit @@ -0,0 +1,143 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 """ + + + + + + + + + """ + add page_title + add """ + + + """ + add header + add """ +
+ +
+
+

Service de diffusion des changements au menu de l'excellente + Brasserie Bénélux + sur la rue Sherbrooke. La liste est mise à jours tous les jours à 14h, + le courriel est envoyé au même moment.

+
+
+
+
@
+ +
+
+ + +
+
+
+ """ + + var message_level = message_level + var message_content = message_content + if message_level != null and message_content != null then + add """ + + """ + end + + var sample_email_lines = sample_email_lines + if sample_email_lines != null then + add """ +
+
Dernier courriel envoyé
+
    +
  • + {{{sample_email_lines.join("
  • ")}}} +
  • +
+
""" + end + + add """ +
+ +""" + end +end + +# Template for the header of Benitlux (right after the opening of ``) +class BenitluxHeader + super Template + + redef fun rendering + do + add """ +""" + end +end diff --git a/contrib/benitlux/src/benitlux_web.nit b/contrib/benitlux/src/benitlux_web.nit new file mode 100644 index 0000000..90e7d24 --- /dev/null +++ b/contrib/benitlux/src/benitlux_web.nit @@ -0,0 +1,37 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 diff --git a/contrib/nitcc/src/grammar.nit b/contrib/nitcc/src/grammar.nit index 48c6195..620b0a0 100644 --- a/contrib/nitcc/src/grammar.nit +++ b/contrib/nitcc/src/grammar.nit @@ -330,11 +330,11 @@ class Production # 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 @@ -396,7 +396,7 @@ class Alternative 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] @@ -424,13 +424,13 @@ class Alternative 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 @@ -620,14 +620,6 @@ class LRAutomaton 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) diff --git a/contrib/pep8analysis/src/ast/pretty_instructions.nit b/contrib/pep8analysis/src/ast/pretty_instructions.nit index 488d382..98380f7 100644 --- a/contrib/pep8analysis/src/ast/pretty_instructions.nit +++ b/contrib/pep8analysis/src/ast/pretty_instructions.nit @@ -23,7 +23,7 @@ end class ASTPrinter super Visitor - var str writable = "" + var str = "" is writable init do end redef fun visit(n) do n.accept_ast_printer(self) diff --git a/contrib/pep8analysis/src/cfg/cfg_base.nit b/contrib/pep8analysis/src/cfg/cfg_base.nit index 4d7264b..c4de901 100644 --- a/contrib/pep8analysis/src/cfg/cfg_base.nit +++ b/contrib/pep8analysis/src/cfg/cfg_base.nit @@ -306,7 +306,7 @@ class CFG 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 diff --git a/contrib/pep8analysis/src/parser/xss/parser.xss b/contrib/pep8analysis/src/parser/xss/parser.xss index 7e24374..435ced7 100644 --- a/contrib/pep8analysis/src/parser/xss/parser.xss +++ b/contrib/pep8analysis/src/parser/xss/parser.xss @@ -20,10 +20,10 @@ $ template make_parser() # 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 diff --git a/contrib/pep8analysis/www/index.html b/contrib/pep8analysis/www/index.html index 3a259df..e7183e7 100644 --- a/contrib/pep8analysis/www/index.html +++ b/contrib/pep8analysis/www/index.html @@ -127,16 +127,20 @@ - Pep/8 Analysis + Xymus.net diff --git a/contrib/tnitter/src/action.nit b/contrib/tnitter/src/action.nit index db3847f..d054b49 100644 --- a/contrib/tnitter/src/action.nit +++ b/contrib/tnitter/src/action.nit @@ -136,6 +136,11 @@ class Tnitter # 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 diff --git a/examples/leapfrog/leapfrog.nit b/examples/leapfrog/leapfrog.nit index ac8cff0..6aa6f48 100644 --- a/examples/leapfrog/leapfrog.nit +++ b/examples/leapfrog/leapfrog.nit @@ -34,7 +34,7 @@ class Animal # 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 diff --git a/examples/mnit_dino/src/game_logic.nit b/examples/mnit_dino/src/game_logic.nit index b148778..1df0119 100644 --- a/examples/mnit_dino/src/game_logic.nit +++ b/examples/mnit_dino/src/game_logic.nit @@ -182,7 +182,7 @@ end class MovingEntity super Entity - var going_to : nullable GamePos writable = null + var going_to : nullable GamePos = null is writable fun speed : Int is abstract diff --git a/examples/nitcorn/Makefile b/examples/nitcorn/Makefile index 96a6ee3..1c55458 100644 --- a/examples/nitcorn/Makefile +++ b/examples/nitcorn/Makefile @@ -1,3 +1,7 @@ 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 diff --git a/examples/nitcorn/src/xymus_net.nit b/examples/nitcorn/src/xymus_net.nit new file mode 100644 index 0000000..9c4b53c --- /dev/null +++ b/examples/nitcorn/src/xymus_net.nit @@ -0,0 +1,150 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 """ +""" + 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 diff --git a/examples/shoot/src/shoot_logic.nit b/examples/shoot/src/shoot_logic.nit index 1aefc7b..838c78b 100644 --- a/examples/shoot/src/shoot_logic.nit +++ b/examples/shoot/src/shoot_logic.nit @@ -36,17 +36,17 @@ class Player 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 @@ -152,7 +152,7 @@ class GoingTarget 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 @@ -834,13 +834,13 @@ class ShotScene 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 @@ -1034,7 +1034,7 @@ class MenuScene end end - var play: Bool writable = false + var play: Bool = false is writable var ttl: Int = 50 redef fun update diff --git a/lib/android/audio.nit b/lib/android/audio.nit index 9fe93e9..8d3264f 100644 --- a/lib/android/audio.nit +++ b/lib/android/audio.nit @@ -137,25 +137,25 @@ end 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 diff --git a/lib/android/sensors.nit b/lib/android/sensors.nit index 2246298..4c28466 100644 --- a/lib/android/sensors.nit +++ b/lib/android/sensors.nit @@ -128,9 +128,9 @@ end # 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 @@ -234,7 +234,7 @@ redef class App 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) diff --git a/lib/bucketed_game.nit b/lib/bucketed_game.nit index cdedc32..b680079 100644 --- a/lib/bucketed_game.nit +++ b/lib/bucketed_game.nit @@ -104,14 +104,14 @@ end # 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 diff --git a/lib/cpp.nit b/lib/cpp.nit index b994a83..3d4daf6 100644 --- a/lib/cpp.nit +++ b/lib/cpp.nit @@ -15,7 +15,9 @@ # 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* `} diff --git a/lib/crypto.nit b/lib/crypto.nit new file mode 100644 index 0000000..a84358f --- /dev/null +++ b/lib/crypto.nit @@ -0,0 +1,218 @@ +# 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 diff --git a/lib/csv.nit b/lib/csv.nit index 9b4da2f..82fbb05 100644 --- a/lib/csv.nit +++ b/lib/csv.nit @@ -19,7 +19,7 @@ module csv 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 diff --git a/lib/curl/curl.nit b/lib/curl/curl.nit index d0c445d..bca105c 100644 --- a/lib/curl/curl.nit +++ b/lib/curl/curl.nit @@ -40,7 +40,7 @@ end # CURL Request class CurlRequest - var verbose: Bool writable = false + var verbose: Bool = false is writable private var curl: nullable Curl = null # Launch request method @@ -76,8 +76,8 @@ class CurlHTTPRequest 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) @@ -201,14 +201,14 @@ class CurlMailRequest 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) @@ -338,7 +338,7 @@ end # Callbacks attributes abstract class CurlCallbacksRegisterIntern - var delegate: nullable CurlCallbacks writable = null + var delegate: nullable CurlCallbacks = null is writable end # Abstract Curl request response diff --git a/lib/curl/curl_c.nit b/lib/curl/curl_c.nit index 152ad55..287dbce 100644 --- a/lib/curl/curl_c.nit +++ b/lib/curl/curl_c.nit @@ -18,8 +18,6 @@ module curl_c is pkgconfig("libcurl") in "C header" `{ - #include - #include #include typedef enum { @@ -42,6 +40,10 @@ in "C header" `{ `} in "C body" `{ + #include + #include + #include + // 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){ diff --git a/lib/egl.nit b/lib/egl.nit index d49ee03..e349a0d 100644 --- a/lib/egl.nit +++ b/lib/egl.nit @@ -21,7 +21,7 @@ # 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 diff --git a/lib/for_abuse.nit b/lib/for_abuse.nit index 40cb1bf..2ee4d28 100644 --- a/lib/for_abuse.nit +++ b/lib/for_abuse.nit @@ -79,7 +79,7 @@ class CompareQuery[E] # 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` diff --git a/lib/glesv2.nit b/lib/glesv2.nit index fd33d63..a039717 100644 --- a/lib/glesv2.nit +++ b/lib/glesv2.nit @@ -20,7 +20,7 @@ # 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 diff --git a/lib/ini.nit b/lib/ini.nit index 232e7c5..a6de8f1 100644 --- a/lib/ini.nit +++ b/lib/ini.nit @@ -284,7 +284,7 @@ end 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 diff --git a/lib/markdown/README b/lib/markdown/README new file mode 100644 index 0000000..a5c6052 --- /dev/null +++ b/lib/markdown/README @@ -0,0 +1,29 @@ +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 diff --git a/lib/markdown/markdown.nit b/lib/markdown/markdown.nit new file mode 100644 index 0000000..4efde74 --- /dev/null +++ b/lib/markdown/markdown.nit @@ -0,0 +1,2315 @@ +# 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 == "

Hello World!

\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 "
\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 "" + v.emit_in block + v.add "\n" + end + + redef fun add_paragraph(v, block) do + v.add "

" + v.emit_in block + v.add "

\n" + end + + redef fun add_code(v, block) do + v.add "
"
+		v.emit_in block
+		v.add "
\n" + end + + redef fun add_blockquote(v, block) do + v.add "
\n" + v.emit_in block + v.add "
\n" + end + + redef fun add_unorderedlist(v, block) do + v.add "
    \n" + v.emit_in block + v.add "
\n" + end + + redef fun add_orderedlist(v, block) do + v.add "
    \n" + v.emit_in block + v.add "
\n" + end + + redef fun add_listitem(v, block) do + v.add "
  • " + v.emit_in block + v.add "
  • \n" + end + + redef fun add_em(v, text) do + v.add "" + v.add text + v.add "" + end + + redef fun add_strong(v, text) do + v.add "" + v.add text + v.add "" + end + + redef fun add_super(v, text) do + v.add "" + v.add text + v.add "" + end + + redef fun add_image(v, link, name, comment) do + v.add "\""" + end + + redef fun add_link(v, link, name, comment) do + v.add "" + v.emit_text(name) + v.add "" + end + + redef fun add_abbr(v, name, comment) do + v.add "" + v.emit_text(name) + v.add "" + end + + redef fun add_span_code(v, text, from, to) do + v.add "" + append_code(v, text, from, to) + v.add "" + end + + redef fun add_line_break(v) do + v.add "
    " + 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 "') + 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 == "

    Hello World!

    \n" + fun md_to_html: Streamable do + var processor = new MarkdownProcessor + return processor.process(self) + end +end diff --git a/lib/markdown/nitmd.nit b/lib/markdown/nitmd.nit new file mode 100644 index 0000000..781a484 --- /dev/null +++ b/lib/markdown/nitmd.nit @@ -0,0 +1,36 @@ +# 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 " + 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) diff --git a/lib/markdown/test_markdown.nit b/lib/markdown/test_markdown.nit new file mode 100644 index 0000000..f3c1252 --- /dev/null +++ b/lib/markdown/test_markdown.nit @@ -0,0 +1,2510 @@ +# 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 = """
    some code
    +
    +""" + var res = test.md_to_html.write_to_string + assert res == exp + end + + + fun test_process_par1 do + var test = "test" + var exp = "

    test

    \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 = """ +

    line1 +line2

    +

    line3 line4

    +

    line5

    +""" + 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 = """ +

    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 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 = """ +

    This is a H1

    +

    This is a 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 = """ +

    This is a H1

    +

    This is a H2

    +
    This is a 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 = """ +

    This is a H1

    +

    This is a H2

    +

    This is a H3

    +""" + var res = test.md_to_html.write_to_string + assert res == exp + end + + fun test_process_hr do + var test = """ +* * * + +*** + +***** + +- - - + +--------------------------------------- +""" + var exp = "
    \n
    \n
    \n
    \n
    \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 = """
    +

    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 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 = """
    +

    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 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 = """
    +

    This is the first level of quoting.

    +
    +

    This is nested blockquote.

    +
    +

    Back to the first level.

    +
    +""" + 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 = """
      +
    • Red
    • +
    • Green
    • +
    • Blue
    • +
    +""" + 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 = """
      +
    • Red
    • +
    • Green
    • +
    • Blue
    • +
    +""" + 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 = """
      +
    • Red
    • +
    • Green
    • +
    • Blue
    • +
    +""" + 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 = """
      +
    1. Bird
    2. +
    3. McHale
    4. +
    5. Parish
    6. +
    +""" + 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 = """
      +
    1. Bird
    2. +
    3. McHale
    4. +
    5. Parish
    6. +
    +""" + 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 = """ +
      +
    • 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 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 = """ +
      +
    • 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 res = test.md_to_html.write_to_string + assert res == exp + end + + fun test_process_list8 do + var test = """ +* Bird + +* Magic +""" + var exp = """ +
      +
    • Bird

      +
    • +
    • Magic

      +
    • +
    +""" + 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 = """ +
      +
    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. +
    3. Suspendisse id sem consectetuer libero luctus adipiscing.

      +
    4. +
    +""" + 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 = """ +
      +
    • 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 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 = """

    This is a normal paragraph:

    +
    This is a code block.
    +
    +""" + 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 + + +""" + var exp = """ +

    Here is an example of AppleScript:

    +
    tell application "Foo"
    +    beep
    +end tell
    +
    +<div class="footer">
    +    &copy; 2004 Foo Corporation
    +</div>
    +
    +""" + 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 = """ +
    +

    This is a header.

    +
      +
    1. This is the first list item.
    2. +
    3. This is the second list item.
    4. +
    +

    Here's some example code:

    +
    return shell_exec("echo $input | $markdown_script");
    +
    +
    +""" + 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 = """ +
      +
    • A list item with a blockquote:

      +
      +

      This is a blockquote +inside a list item.

      +
      +
    • +
    +""" + 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: + + +""" + var exp = """ +
      +
    • A list item with a code block:

      +
      <code goes here>
      +
      +
    • +
    +""" + 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 = """ +
      +
    • Tab
        +
      • Tab
          +
        • Tab
        • +
        +
      • +
      +
    • +
    +""" + 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 = """ + #
      + #
    • this

      + #
        + #
      • sub
      • + #
      + #

      that

      + #
    • + #
    + # """ + # 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 = """

    single asterisks

    +

    single underscores

    +

    double asterisks

    +

    double underscores

    +""" + 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 = "

    unfriggingbelievable

    \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. + + + + + +
    Foo
    + +This is another regular paragraph. +""" + var exp = """ +

    This is a regular paragraph.

    + + + + +
    Foo
    +

    This is another regular paragraph.

    +""" + var res = test.md_to_html.write_to_string + assert res == exp + end + + fun test_process_xml2 do + var test = """ +This is an image baz in a regular paragraph. +""" + var exp = """

    This is an image baz in a regular paragraph.

    +""" + var res = test.md_to_html.write_to_string + assert res == exp + end + + fun test_process_xml3 do + var test = """ +
    +""" + var exp = """ +
    +""" + 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 = "

    Use the printf() function.

    \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 = "

    There is a literal backtick (`) here.

    \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 = """ +

    A single backtick in a code span: `

    +

    A backtick-delimited string in a code span: `foo`

    +""" + 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 `` tags." + var exp = "

    Please don't use any <blink> tags.

    \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 = "

    &#8212; is the decimal-encoded equivalent of &mdash;.

    \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 = "

    *this text is surrounded by literal asterisks*

    \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 = "

    1986. What a great season.

    \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 = "

    Ben & Lux

    \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 = """

    This is an example inline link.

    +

    This link has no title attribute.

    +""" + 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 = "

    See my About page for details.

    \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 = """ +

    This is an example reference-style link.

    +

    This is an example reference-style link.

    +

    Some lorem ipsum

    +

    Some other lipsum

    +""" + 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 = """ +

    This is multiple examples: foo, bar, baz.

    +""" + 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 = """

    This is multiple examples: foo, bar, a.

    +""" + 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 = """

    I get 10 times more traffic from Google than from Yahoo or MSN.

    +""" + 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 = """

    Visit Daring Fireball for more information.

    +""" + 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 = """ +

    This one has a line +break.

    +

    This one has a line +break with a line-ending space.

    +""" + 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 = """ + #

    Foo bar.

    + #

    Foo bar.

    + # """ + # 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 = """

    Alt text

    +

    Alt text

    +""" + 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 = """

    Alt text

    +""" + 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](). + + +[1]: http://example.com/?foo=1&bar=2 +[2]: http://att.com/ "AT&T" +""" + + var exp = """ +

    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 with an ampersand in the URL.

    +

    Here's a link with an amersand in the link text: AT&T.

    +

    Here's an inline link.

    +

    Here's an inline link.

    +""" + var res = test.md_to_html.write_to_string + assert res == exp + + end + + fun test_daring_autolinks do + var test = """ +Link: . + +With an ampersand: + +* In a list? +* +* It should. + +> Blockquoted: + +Auto-links should not occur here: `` + + or here: +""" + + var exp = """ +

    Link: http://example.com/.

    +

    With an ampersand: http://example.com/?foo=1&bar=2

    + +
    +

    Blockquoted: http://example.com/

    +
    +

    Auto-links should not occur here: <http://example.com/>

    +
    or here: <http://example.com/>
    +
    +""" + 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 bar. + +This is a tag with backslashes bar. +""" + var exp = """ +

    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 bar.

    +

    This is a tag with backslashes bar.

    +""" + + 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 = """ +
    +

    Example:

    +
    sub status {
    +    print "working";
    +}
    +
    +

    Or:

    +
    sub status {
    +    return "working";
    +}
    +
    +
    +""" + 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 = """ +
    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 res = test.md_to_html.write_to_string + assert res == exp + end + + fun test_daring_code_spans do + var test = """ +`` + +Fix for backticks within HTML tag: like this + +Here's how you put `` `backticks` `` in a code span. +""" + + var exp = """ +

    <test a=" content of attribute ">

    +

    Fix for backticks within HTML tag: like this

    +

    Here's how you put `backticks` in a code span.

    +""" + 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 = """ +

    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 res = test.md_to_html.write_to_string + assert res == exp + end + + fun test_daring_rules do + var test = """ +Dashes: + +--- + + --- + + --- + + --- + + --- + +- - - + + - - - + + - - - + + - - - + + - - - + + +Asterisks: + +*** + + *** + + *** + + *** + + *** + +* * * + + * * * + + * * * + + * * * + + * * * + + +Underscores: + +___ + + ___ + + ___ + + ___ + + ___ + +_ _ _ + + _ _ _ + + _ _ _ + + _ _ _ + + _ _ _ +""" + + var exp = """ +

    Dashes:

    +
    +
    +
    +
    +
    ---
    +
    +
    +
    +
    +
    +
    - - -
    +
    +

    Asterisks:

    +
    +
    +
    +
    +
    ***
    +
    +
    +
    +
    +
    +
    * * *
    +
    +

    Underscores:

    +
    +
    +
    +
    +
    ___
    +
    +
    +
    +
    +
    +
    _ _ _
    +
    +""" + 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]() + +![alt text]( "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 = """ +

    Alt text

    +

    Alt text

    +

    Inline within a paragraph: alt text.

    +

    alt text

    +

    alt text

    +

    alt text

    +

    alt text.

    +

    Empty

    +

    this is a stupid URL

    +

    alt text

    +

    alt text

    +""" + 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: + +
    + foo +
    + +This should be a code block, though: + +
    + foo +
    + +As should this: + +
    foo
    + +Now, nested: + +
    +
    +
    + foo +
    +
    +
    + +This should just be an HTML comment: + + + +Multiline: + + + +Code block: + + + +Just plain comment, with trailing spaces on the line: + + + +Code: + +
    + +Hr's: + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    +""" + + var exp = """ +

    Here's a simple block:

    +
    + foo +
    +

    This should be a code block, though:

    +
    <div>
    +    foo
    +</div>
    +
    +

    As should this:

    +
    <div>foo</div>
    +
    +

    Now, nested:

    +
    +
    +
    + foo +
    +
    +
    +

    This should just be an HTML comment:

    + +

    Multiline:

    + +

    Code block:

    +
    <!-- Comment -->
    +
    +

    Just plain comment, with trailing spaces on the line:

    + +

    Code:

    +
    <hr />
    +
    +

    Hr's:

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +""" + 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: + +
    foo
    + +And nested without indentation: + +
    +
    +
    +foo +
    +
    +
    +
    bar
    +
    + +And with attributes: + +
    +
    +
    +
    + +This was broken in 1.0.2b7: + +
    +
    +foo +
    +
    +""" + + var exp = """ +

    Simple block on one line:

    +
    foo
    +

    And nested without indentation:

    +
    +
    +
    +foo +
    +
    +
    +
    bar
    +
    +

    And with attributes:

    +
    +
    +
    +
    +

    This was broken in 1.0.2b7:

    +
    +
    +foo +
    +
    +""" + var res = test.md_to_html.write_to_string + assert res == exp + end + + fun test_daring_inline_html3 do + var test = """ +Paragraph one. + + + + + +Paragraph two. + + + +The end. +""" + + var exp = """ +

    Paragraph one.

    + + +

    Paragraph two.

    + +

    The end.

    +""" + 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 w/ angle brackets + title]( "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 = """ +

    Just a URL.

    +

    URL and title.

    +

    URL and title.

    +

    URL and title.

    +

    URL and title.

    +

    URL wrapped in angle brackets.

    +

    URL w/ angle brackets + title.

    +

    Empty.

    +

    With parens in the URL

    +

    (With outer parens and parens in url)

    +

    With parens in the URL

    +

    (With outer parens and parens in url)

    +""" + 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 = """ +

    Foo bar.

    +

    Foo bar.

    +

    Foo bar.

    +

    With embedded [brackets].

    +

    Indented once.

    +

    Indented twice.

    +

    Indented thrice.

    +

    Indented [four][] times.

    +
    [four]: /url
    +
    +
    +

    this should work

    +

    So should 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 points to something else.

    +

    Backslashing should suppress [this] and [this].

    +
    +

    Here's one where the link +breaks across lines.

    +

    Here's another where the link +breaks across lines, but with a line-ending space.

    +""" + 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 = """ +

    This is the simple case.

    +

    This one has a line +break.

    +

    This one has a line +break with a line-ending space.

    +

    this and the other

    +""" + 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 = """ +
    +

    foo

    +
    +

    bar

    +
    +

    foo

    +
    +""" + 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 = """ +

    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. +
    3. Second
    4. +
    5. Third
    6. +
    +

    and:

    +
      +
    1. One
    2. +
    3. Two
    4. +
    5. Three
    6. +
    +

    Loose using tabs:

    +
      +
    1. First

      +
    2. +
    3. Second

      +
    4. +
    5. Third

      +
    6. +
    +

    and using spaces:

    +
      +
    1. One

      +
    2. +
    3. Two

      +
    4. +
    5. Three

      +
    6. +
    +

    Multiple paragraphs:

    +
      +
    1. Item 1, graf one.

      +

      Item 2. graf two. The quick brown fox jumped over the lazy dog's +back.

      +
    2. +
    3. Item 2.

      +
    4. +
    5. Item 3.

      +
    6. +
    +

    Nested

    +
      +
    • Tab
        +
      • Tab
          +
        • Tab
        • +
        +
      • +
      +
    • +
    +

    Here's another:

    +
      +
    1. First
    2. +
    3. Second:
        +
      • Fee
      • +
      • Fie
      • +
      • Foe
      • +
      +
    4. +
    5. Third
    6. +
    +

    Same thing but with paragraphs:

    +
      +
    1. First

      +
    2. +
    3. Second:

      +
        +
      • Fee
      • +
      • Fie
      • +
      • Foe
      • +
      +
    4. +
    5. Third

      +
    6. +
    +""" + 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 = """ +

    This is strong and em.

    +

    So is this word.

    +

    This is strong and em.

    +

    So is this word.

    +""" + 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 = """ +
      +
    • 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 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 = """ +
    +

    A list within a blockquote:

    +
      +
    • asterisk 1
    • +
    • asterisk 2
    • +
    • asterisk 3
    • +
    +
    +""" + 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("

    ") + assert subject.kind(v) isa LineXML + subject = new MDLine("

    ") + 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 diff --git a/lib/mnit/mnit_app.nit b/lib/mnit/mnit_app.nit index 4c003a6..9987b8c 100644 --- a/lib/mnit/mnit_app.nit +++ b/lib/mnit/mnit_app.nit @@ -30,10 +30,10 @@ redef class App # 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 diff --git a/lib/mnit/mnit_fps.nit b/lib/mnit/mnit_fps.nit index cd30e83..2b2abf1 100644 --- a/lib/mnit/mnit_fps.nit +++ b/lib/mnit/mnit_fps.nit @@ -24,7 +24,7 @@ redef class App # 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. diff --git a/lib/mnit/mnit_null.nit b/lib/mnit/mnit_null.nit index c966769..91bc359 100644 --- a/lib/mnit/mnit_null.nit +++ b/lib/mnit/mnit_null.nit @@ -77,7 +77,7 @@ class NullImage 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 diff --git a/lib/mnit/tileset.nit b/lib/mnit/tileset.nit index 7b473f3..b0eae74 100644 --- a/lib/mnit/tileset.nit +++ b/lib/mnit/tileset.nit @@ -80,11 +80,11 @@ class TileSetFont # 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` diff --git a/lib/neo4j/curl_json.nit b/lib/neo4j/curl_json.nit index 77d3650..f1a1da8 100644 --- a/lib/neo4j/curl_json.nit +++ b/lib/neo4j/curl_json.nit @@ -35,14 +35,14 @@ abstract class JsonCurlRequest 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 @@ -125,7 +125,7 @@ end class JsonPOST super JsonCurlRequest - var data: nullable Jsonable writable = null + var data: nullable Jsonable = null is writable redef fun init_headers do super @@ -160,7 +160,7 @@ end class JsonPUT super JsonCurlRequest - var data: nullable Jsonable writable = null + var data: nullable Jsonable = null is writable redef fun init_headers do super diff --git a/lib/nitcc_runtime.nit b/lib/nitcc_runtime.nit index c71ea6b..74dcd43 100644 --- a/lib/nitcc_runtime.nit +++ b/lib/nitcc_runtime.nit @@ -116,7 +116,7 @@ abstract class Parser # 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 @@ -318,7 +318,7 @@ abstract class 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) @@ -423,7 +423,7 @@ abstract class NToken end # The text associated with the token - var text: String writable = "" + var text: String = "" is writable redef fun to_s do var res = super diff --git a/lib/nitcorn/file_server.nit b/lib/nitcorn/file_server.nit index 348383e..3552b2d 100644 --- a/lib/nitcorn/file_server.nit +++ b/lib/nitcorn/file_server.nit @@ -21,6 +21,7 @@ module file_server 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 @@ -41,9 +42,29 @@ end 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 @@ -51,17 +72,24 @@ class FileServer 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 @@ -71,22 +99,30 @@ class FileServer 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 ".." + if turi.length > 1 then + var path = (request.uri + "/..").simplify_path + links.add ".." end for file in files do - var path = (turi + "/" + file).simplify_path - links.add "{file}" + 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 "{file}" end + var header = self.header + var header_code + if header != null then + header_code = header.write_to_string + else header_code = "" + response.body = """ @@ -96,6 +132,7 @@ class FileServer {{{title}}} + {{{header_code}}}

    {{{title}}}

      @@ -114,7 +151,9 @@ class FileServer 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 @@ -123,6 +162,12 @@ class FileServer 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 diff --git a/lib/nitcorn/http_errors.nit b/lib/nitcorn/http_errors.nit new file mode 100644 index 0000000..dd50e0b --- /dev/null +++ b/lib/nitcorn/http_errors.nit @@ -0,0 +1,77 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 """ + + + + + + """ + add message + add """ + + +""" + + var header = header + if header != null then add header + + add """ +
      +

      """ + add message + add "

      " + + var body = body + if body != null then add body + + add """ +
      + +""" + end + + redef fun to_s do return write_to_string +end diff --git a/lib/nitcorn/http_request.nit b/lib/nitcorn/http_request.nit index 1a49e0c..07b91ad 100644 --- a/lib/nitcorn/http_request.nit +++ b/lib/nitcorn/http_request.nit @@ -54,6 +54,9 @@ class HttpRequest # 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` @@ -96,7 +99,10 @@ class HttpRequestParser 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 @@ -113,6 +119,7 @@ class HttpRequestParser 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 diff --git a/lib/nitcorn/media_types.nit b/lib/nitcorn/media_types.nit index bf5d74a..e16798e 100644 --- a/lib/nitcorn/media_types.nit +++ b/lib/nitcorn/media_types.nit @@ -95,6 +95,7 @@ class MediaTypes 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 diff --git a/lib/nitcorn/reactor.nit b/lib/nitcorn/reactor.nit index a8f9236..0457f3c 100644 --- a/lib/nitcorn/reactor.nit +++ b/lib/nitcorn/reactor.nit @@ -61,6 +61,9 @@ class HttpServer 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 diff --git a/lib/nitcorn/server_config.nit b/lib/nitcorn/server_config.nit index 2decb16..f90d4ef 100644 --- a/lib/nitcorn/server_config.nit +++ b/lib/nitcorn/server_config.nit @@ -21,10 +21,11 @@ module server_config # 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 diff --git a/lib/opts.nit b/lib/opts.nit index 19b8ff3..a1bffc1 100644 --- a/lib/opts.nit +++ b/lib/opts.nit @@ -29,19 +29,19 @@ abstract class Option 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]) @@ -138,7 +138,7 @@ abstract class OptionParameter 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 diff --git a/lib/pnacl.nit b/lib/pnacl.nit index a76784e..bc876c0 100644 --- a/lib/pnacl.nit +++ b/lib/pnacl.nit @@ -27,13 +27,7 @@ module pnacl is platform import standard intrude import standard::stream -`{ - #include - #include - #include - #include - #include - #include +in "C Header" `{ #include "ppapi/c/pp_errors.h" #include "ppapi/c/ppp.h" #include "ppapi/c/ppp_instance.h" @@ -43,6 +37,15 @@ intrude import standard::stream #include "ppapi/c/ppp_messaging.h" #include "ppapi/c/ppb_var_dictionary.h" #include "ppapi/c/ppb_var_array.h" +`} + +`{ + #include + #include + #include + #include + #include + #include #define MAX_DICTIONARY_QUEUE_SIZE 200 #define MAX_MESSAGE_QUEUE_SIZE 10 diff --git a/lib/scene2d.nit b/lib/scene2d.nit index 18a5d13..ac5a571 100644 --- a/lib/scene2d.nit +++ b/lib/scene2d.nit @@ -23,7 +23,7 @@ abstract class LiveObject 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 @@ -37,16 +37,16 @@ class Sprite 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 @@ -54,10 +54,10 @@ class Sprite 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 diff --git a/lib/standard/collection/abstract_collection.nit b/lib/standard/collection/abstract_collection.nit index 9d37e15..7320e83 100644 --- a/lib/standard/collection/abstract_collection.nit +++ b/lib/standard/collection/abstract_collection.nit @@ -188,7 +188,7 @@ class Container[E] 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. @@ -940,10 +940,10 @@ end 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) diff --git a/lib/standard/file.nit b/lib/standard/file.nit index 3443105..06001df 100644 --- a/lib/standard/file.nit +++ b/lib/standard/file.nit @@ -526,13 +526,13 @@ end 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 diff --git a/lib/standard/math.nit b/lib/standard/math.nit index 7db6fa3..ba4db63 100644 --- a/lib/standard/math.nit +++ b/lib/standard/math.nit @@ -51,6 +51,16 @@ redef class Int 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 diff --git a/lib/standard/posix.nit b/lib/standard/posix.nit index f017649..1fe850d 100644 --- a/lib/standard/posix.nit +++ b/lib/standard/posix.nit @@ -19,7 +19,7 @@ module posix import string -`{ +in "C Header" `{ #include #include #include diff --git a/lib/standard/re.nit b/lib/standard/re.nit new file mode 100644 index 0000000..97cb7cb --- /dev/null +++ b/lib/standard/re.nit @@ -0,0 +1,408 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 + #include +`} + +# 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 diff --git a/lib/standard/standard.nit b/lib/standard/standard.nit index 21ff465..4550113 100644 --- a/lib/standard/standard.nit +++ b/lib/standard/standard.nit @@ -31,3 +31,4 @@ import bitset import queue import numeric import error +import re diff --git a/lib/standard/string.nit b/lib/standard/string.nit index 2ae29ef..a81bdd6 100644 --- a/lib/standard/string.nit +++ b/lib/standard/string.nit @@ -157,13 +157,6 @@ abstract class Text 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 # @@ -631,6 +624,14 @@ abstract class Text 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 @@ -658,6 +659,10 @@ end 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 @@ -825,6 +830,38 @@ abstract class String 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 @@ -972,15 +1009,15 @@ class FlatString 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) @@ -1202,6 +1239,14 @@ abstract class Buffer # 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 @@ -1264,6 +1309,38 @@ abstract class Buffer # 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 @@ -1288,6 +1365,17 @@ class FlatBuffer 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 @@ -1302,6 +1390,7 @@ class FlatBuffer add(item) return end + if written then reset assert index >= 0 and index < length items[index] = item end @@ -1316,6 +1405,7 @@ class FlatBuffer redef fun clear do is_dirty = true + if written then reset length = 0 end @@ -1326,6 +1416,9 @@ class FlatBuffer 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 @@ -1334,7 +1427,9 @@ class FlatBuffer 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 @@ -1432,6 +1527,7 @@ class FlatBuffer redef fun reverse do + written = false var ns = calloc_string(capacity) var si = length - 1 var ni = 0 @@ -1454,6 +1550,7 @@ class FlatBuffer redef fun upper do + if written then reset var it = items var id = length - 1 while id >= 0 do @@ -1464,6 +1561,7 @@ class FlatBuffer redef fun lower do + if written then reset var it = items var id = length - 1 while id >= 0 do @@ -1951,7 +2049,9 @@ extern class NativeString `{ char* `} 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 @@ -1959,7 +2059,9 @@ extern class NativeString `{ char* `} 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 diff --git a/lib/standard/string_search.nit b/lib/standard/string_search.nit index 95ac9d5..5aeac25 100644 --- a/lib/standard/string_search.nit +++ b/lib/standard/string_search.nit @@ -84,6 +84,8 @@ interface Pattern 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. @@ -374,4 +376,11 @@ redef class Text 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 diff --git a/lib/string_experimentations/utf8.nit b/lib/string_experimentations/utf8.nit index 14f8550..5feef35 100644 --- a/lib/string_experimentations/utf8.nit +++ b/lib/string_experimentations/utf8.nit @@ -354,6 +354,20 @@ redef class FlatString 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 diff --git a/lib/template/macro.nit b/lib/template/macro.nit new file mode 100644 index 0000000..0b1c9e4 --- /dev/null +++ b/lib/template/macro.nit @@ -0,0 +1,375 @@ +# 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`: +# +# +# +# +# %TITLE% +# +# +#

      %TITLE%

      +#

      %ARTICLE%

      +# +# +# +# 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 diff --git a/lib/template.nit b/lib/template/template.nit similarity index 100% rename from lib/template.nit rename to lib/template/template.nit diff --git a/lib/template/test_macro.nit b/lib/template/test_macro.nit new file mode 100644 index 0000000..b2854e6 --- /dev/null +++ b/lib/template/test_macro.nit @@ -0,0 +1,211 @@ +# 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 = """ + + + + Dave's Profile + + +

      Dave

      +

      Profile

      + +""" + var subject = new TemplateString(tpl) + var res = subject.write_to_string + assert res == tpl + end + + fun test_tpl_parse_2 do + var tpl = """ + + + + %TITLE% + + +

      %TITLE%

      +

      %ARTICLE%

      + +""" + var subject = new TemplateString(tpl) + var res = subject.write_to_string + assert res == tpl + end + + fun test_tpl_parse_3 do + var tpl = """ + + + + % + +""" + var subject = new TemplateString(tpl) + var res = subject.write_to_string + assert res == tpl + end + + fun test_tpl_parse_4 do + var tpl = """ + + + + % + + +

      %

      + +""" + var subject = new TemplateString(tpl) + var res = subject.write_to_string + assert res == tpl + end + + fun test_tpl_parse_5 do + var tpl = """ + + + + % + + +

      %TITLE%

      +

      %ARTICLE%

      + +""" + var subject = new TemplateString(tpl) + var res = subject.write_to_string + assert res == tpl + end + + fun test_tpl_parse_6 do + var tpl = """ + + + + % + + +

      %%

      + +""" + var subject = new TemplateString(tpl) + var res = subject.write_to_string + assert res == tpl + end + + fun test_tpl_replace_1 do + var tpl = """ + + + + %TITLE% + + +

      %TITLE%

      +

      %ARTICLE%

      + +""" + var exp = """ + + + + Hello World! + + +

      Hello World!

      +

      %ARTICLE%

      + +""" + 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 = """ + + + + %TITLE% + + +

      %TITLE%

      +

      %BODY%

      + +""" + var exp = """ + + + + Hello World! + + +

      Hello World!

      +

      Some body you want to know...

      + +""" + 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 = """ + + + + %TITLE% + + +

      %TITLE%

      +

      %BODY%

      + +""" + var exp = """ + + + + Hello World! + + +

      Hello World!

      +

      Click me!

      + +""" + var link = new Template + var subject = new TemplateString(tpl) + subject.replace("TITLE", "Hello World!") + subject.replace("BODY", link) + link.add "" + link.add "Click me!" + link.add "" + var res = subject.write_to_string + assert res == exp + end +end diff --git a/lib/trees/abstract_tree.nit b/lib/trees/abstract_tree.nit index 0b79490..d05663e 100644 --- a/lib/trees/abstract_tree.nit +++ b/lib/trees/abstract_tree.nit @@ -28,7 +28,7 @@ abstract class TreeMap[K: Comparable, E] 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 @@ -51,7 +51,7 @@ class TreeNode[K: Comparable, E] 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 ""}\}" diff --git a/lib/x11.nit b/lib/x11.nit index b4f51d5..df0b984 100644 --- a/lib/x11.nit +++ b/lib/x11.nit @@ -15,7 +15,7 @@ # 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 # diff --git a/misc/vim/syntax_checkers/nit/nitg.vim b/misc/vim/syntax_checkers/nit/nitg.vim index f12f3ed..22494b7 100644 --- a/misc/vim/syntax_checkers/nit/nitg.vim +++ b/misc/vim/syntax_checkers/nit/nitg.vim @@ -23,12 +23,12 @@ let loaded_syntastic_nit_nitg_checker = 1 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 @@ -38,7 +38,7 @@ function! SyntaxCheckers_nit_nitg_IsAvailable() 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') diff --git a/share/nitdoc/css/nitdoc.css b/share/nitdoc/css/nitdoc.css index 0fd73b7..a6084f7 100644 --- a/share/nitdoc/css/nitdoc.css +++ b/share/nitdoc/css/nitdoc.css @@ -33,6 +33,15 @@ h3 { margin: 10px 0; } +article { + padding: 10px 0px; +} + +article.nospace { + padding: 0; + margin: 0; +} + /* * Sidebar */ @@ -178,10 +187,6 @@ h3 { display: none; } -#content article { - padding: 10px 0px; -} - #content article:target { padding-left: 10px; margin-left: -10px; @@ -221,7 +226,7 @@ h3 { vertical-align: middle; } -.signature a, .list-definition a { +.signature a, .list-definition a, .info.signature a { color: #0d8921; } @@ -241,7 +246,7 @@ h3 { text-align: center; } -.synopsys { +.nitdoc .synopsys { margin: 5px 0; font-size: 16px; font-weight: bold; diff --git a/src/Makefile b/src/Makefile index 44f2a21..2f3d7a1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -16,7 +16,7 @@ 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)) diff --git a/src/compiler/abstract_compiler.nit b/src/compiler/abstract_compiler.nit index c1d1120..5251f34 100644 --- a/src/compiler/abstract_compiler.nit +++ b/src/compiler/abstract_compiler.nit @@ -21,6 +21,7 @@ import literal import semantize import platform import c_tools +private import annotation # Add compiling options redef class ToolContext @@ -444,13 +445,13 @@ abstract class AbstractCompiler # 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 @@ -479,7 +480,7 @@ abstract class AbstractCompiler 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) @@ -1017,10 +1018,10 @@ abstract class AbstractCompilerVisitor 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 @@ -1149,12 +1150,22 @@ abstract class AbstractCompilerVisitor # 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 @@ -1286,6 +1297,16 @@ abstract class AbstractCompilerVisitor 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 @@ -1523,7 +1544,7 @@ abstract class AbstractRuntimeFunction # 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 @@ -1546,11 +1567,11 @@ class RuntimeVariable 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 @@ -1600,21 +1621,25 @@ class Frame 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 @@ -1641,13 +1666,20 @@ 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 @@ -1663,8 +1695,6 @@ redef class MClassType 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 @@ -1862,6 +1892,18 @@ redef class AMethPropdef 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 @@ -1869,17 +1911,13 @@ redef class AMethPropdef 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 @@ -1892,7 +1930,7 @@ redef class AMethPropdef 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 @@ -1904,243 +1942,245 @@ redef class AMethPropdef 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) @@ -2149,40 +2189,48 @@ redef class AMethPropdef 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 @@ -2875,7 +2923,7 @@ redef class ANewExpr 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) diff --git a/src/compiler/android_platform.nit b/src/compiler/android_platform.nit index c06a374..6fec966 100644 --- a/src/compiler/android_platform.nit +++ b/src/compiler/android_platform.nit @@ -19,8 +19,8 @@ module android_platform 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 diff --git a/src/compiler/compiler_ffi.nit b/src/compiler/compiler_ffi.nit index f3ac581..37689d8 100644 --- a/src/compiler/compiler_ffi.nit +++ b/src/compiler/compiler_ffi.nit @@ -18,7 +18,7 @@ module compiler_ffi intrude import abstract_compiler -intrude import common_ffi +intrude import ffi import nitni redef class MModule @@ -110,8 +110,6 @@ redef class AMethPropdef 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) @@ -144,15 +142,10 @@ redef class AMethPropdef 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 @@ -167,6 +160,7 @@ redef class AMethPropdef 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 @@ -199,23 +193,20 @@ redef class AMethPropdef 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 @@ -225,6 +216,7 @@ redef class AMethPropdef var recv_var = v.new_var(return_mtype) v.adapt_signature(mpropdef, arguments) + v.unbox_signature_extern(mpropdef, arguments) arguments.shift @@ -252,9 +244,11 @@ redef class AMethPropdef 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 @@ -391,17 +385,14 @@ redef class MExplicitCall 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) @@ -409,6 +400,7 @@ redef class MExplicitCall 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 @@ -423,6 +415,7 @@ redef class MExplicitCall 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("\}") @@ -459,11 +452,13 @@ redef class MExplicitSuper 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 @@ -473,6 +468,8 @@ redef class MExplicitSuper 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("\}") @@ -500,11 +497,14 @@ redef class MExplicitCast 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};") @@ -531,11 +531,12 @@ redef class MExplicitCast 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") @@ -545,6 +546,7 @@ redef class MExplicitCast ## 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) diff --git a/src/compiler/global_compiler.nit b/src/compiler/global_compiler.nit index 9a82243..2196071 100644 --- a/src/compiler/global_compiler.nit +++ b/src/compiler/global_compiler.nit @@ -61,6 +61,9 @@ redef class ModelBuilder 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 @@ -71,6 +74,9 @@ redef class ModelBuilder 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 @@ -116,7 +122,7 @@ class GlobalCompiler 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 @@ -193,11 +199,11 @@ class GlobalCompiler 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. @@ -252,7 +258,6 @@ class GlobalCompiler 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});") @@ -318,6 +323,34 @@ class GlobalCompilerVisitor 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 @@ -507,6 +540,7 @@ class GlobalCompilerVisitor 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 @@ -519,6 +553,7 @@ class GlobalCompilerVisitor 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) @@ -592,6 +627,19 @@ class GlobalCompilerVisitor 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 @@ -846,6 +894,15 @@ class GlobalCompilerVisitor 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 diff --git a/src/compiler/separate_compiler.nit b/src/compiler/separate_compiler.nit index 4dfbeb0..84bc443 100644 --- a/src/compiler/separate_compiler.nit +++ b/src/compiler/separate_compiler.nit @@ -191,7 +191,11 @@ class SeparateCompiler 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 @@ -213,9 +217,11 @@ class SeparateCompiler 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] @@ -662,14 +668,13 @@ class SeparateCompiler 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} */") @@ -698,23 +703,24 @@ class SeparateCompiler 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}") @@ -722,10 +728,31 @@ class SeparateCompiler 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 @@ -738,9 +765,9 @@ class SeparateCompiler 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}") @@ -749,6 +776,30 @@ class SeparateCompiler 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 @@ -909,6 +960,22 @@ class SeparateCompilerVisitor 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 @@ -916,9 +983,12 @@ class SeparateCompilerVisitor 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! */") @@ -941,6 +1011,42 @@ class SeparateCompilerVisitor 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 @@ -995,13 +1101,13 @@ class SeparateCompilerVisitor 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 @@ -1307,7 +1413,7 @@ class SeparateCompilerVisitor # 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} */") @@ -1481,7 +1587,8 @@ class SeparateCompilerVisitor 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}") @@ -1564,12 +1671,12 @@ class SeparateCompilerVisitor 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 @@ -1635,7 +1742,7 @@ class SeparateCompilerVisitor 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 @@ -1643,10 +1750,10 @@ class SeparateCompilerVisitor 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 @@ -1851,23 +1958,6 @@ 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 @@ -1881,3 +1971,13 @@ redef class MPropDef 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 diff --git a/src/compiler/separate_erasure_compiler.nit b/src/compiler/separate_erasure_compiler.nit index dcb9d6c..af3a43c 100644 --- a/src/compiler/separate_erasure_compiler.nit +++ b/src/compiler/separate_erasure_compiler.nit @@ -219,7 +219,6 @@ class SeparateErasureCompiler 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] @@ -290,25 +289,42 @@ class SeparateErasureCompiler 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 @@ -332,6 +348,26 @@ class SeparateErasureCompiler 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 @@ -579,6 +615,40 @@ class SeparateErasureCompilerVisitor 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") diff --git a/src/doc/doc_model.nit b/src/doc/doc_model.nit index 01b7bc7..5d666c8 100644 --- a/src/doc/doc_model.nit +++ b/src/doc/doc_model.nit @@ -107,7 +107,7 @@ redef class MEntity 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 @@ -137,7 +137,7 @@ redef class MConcern 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 @@ -397,10 +397,10 @@ redef class MClassDef 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 @@ -482,7 +482,7 @@ redef class MPropDef var tpl = new Template tpl.add mclassdef.tpl_namespace tpl.add "::" - tpl.add mproperty.name + tpl.add tpl_link return tpl end @@ -500,14 +500,6 @@ redef class MPropDef 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 @@ -547,16 +539,35 @@ redef class MPropDef 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 diff --git a/src/doc/doc_pages.nit b/src/doc/doc_pages.nit index 9c38d44..c0a1b2f 100644 --- a/src/doc/doc_pages.nit +++ b/src/doc/doc_pages.nit @@ -231,7 +231,9 @@ class QuickSearch 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 @@ -350,7 +352,10 @@ abstract class NitdocPage 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 "View Source" + 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) @@ -463,28 +468,72 @@ abstract class NitdocPage 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 "" + 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 @@ -1052,10 +1101,14 @@ class NitdocClass 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 @@ -1065,7 +1118,7 @@ class NitdocClass 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 @@ -1131,8 +1184,8 @@ class NitdocClass 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 @@ -1152,14 +1205,14 @@ class NitdocClass 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) @@ -1170,9 +1223,18 @@ class NitdocClass 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 @@ -1196,33 +1258,48 @@ class NitdocClass 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 @@ -1305,6 +1382,7 @@ class NitdocClass 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) @@ -1315,14 +1393,28 @@ class NitdocClass 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") @@ -1378,13 +1470,12 @@ class NitdocProperty 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 diff --git a/src/doc/doc_templates.nit b/src/doc/doc_templates.nit index 4d3b253..200e650 100644 --- a/src/doc/doc_templates.nit +++ b/src/doc/doc_templates.nit @@ -274,11 +274,11 @@ class TplSideBox # 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 @@ -383,14 +383,14 @@ class TplSectionElt # 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] @@ -471,8 +471,8 @@ class TplArticle 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) @@ -652,13 +652,13 @@ class TplLink 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 @@ -748,6 +748,67 @@ class TplListItem 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 "
      " + for panel in panels do add panel + add "
      " + 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 "" + lnk.add name + lnk.add "" + return lnk + end + + redef fun rendering do + add "
      " + if content != null then add content.as(not null) + add "
      " + end +end + # A label with a text content class TplLabel super Template diff --git a/src/common_ffi/c.nit b/src/ffi/c.nit similarity index 98% rename from src/common_ffi/c.nit rename to src/ffi/c.nit index 4e4402c..92697f5 100644 --- a/src/common_ffi/c.nit +++ b/src/ffi/c.nit @@ -72,8 +72,8 @@ redef class Location 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 diff --git a/src/common_ffi/c_compiler_options.nit b/src/ffi/c_compiler_options.nit similarity index 100% rename from src/common_ffi/c_compiler_options.nit rename to src/ffi/c_compiler_options.nit diff --git a/src/common_ffi/cpp.nit b/src/ffi/cpp.nit similarity index 99% rename from src/common_ffi/cpp.nit rename to src/ffi/cpp.nit index 8cdce81..f75c100 100644 --- a/src/common_ffi/cpp.nit +++ b/src/ffi/cpp.nit @@ -27,7 +27,7 @@ end redef class MModule private var cpp_file: nullable CPPCompilationUnit = null - var cpp_compiler_options writable = "" + var cpp_compiler_options = "" is writable end class CPPLanguage @@ -63,7 +63,7 @@ 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") diff --git a/src/common_ffi/extern_classes.nit b/src/ffi/extern_classes.nit similarity index 100% rename from src/common_ffi/extern_classes.nit rename to src/ffi/extern_classes.nit diff --git a/src/common_ffi/extra_java_files.nit b/src/ffi/extra_java_files.nit similarity index 100% rename from src/common_ffi/extra_java_files.nit rename to src/ffi/extra_java_files.nit diff --git a/src/common_ffi/common_ffi.nit b/src/ffi/ffi.nit similarity index 98% rename from src/common_ffi/common_ffi.nit rename to src/ffi/ffi.nit index cb9c244..a418616 100644 --- a/src/common_ffi/common_ffi.nit +++ b/src/ffi/ffi.nit @@ -17,7 +17,7 @@ # 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 @@ -135,7 +135,7 @@ redef class VerifyNitniCallbacksPhase 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 diff --git a/src/common_ffi/ffi_base.nit b/src/ffi/ffi_base.nit similarity index 100% rename from src/common_ffi/ffi_base.nit rename to src/ffi/ffi_base.nit diff --git a/src/common_ffi/header_dependency.nit b/src/ffi/header_dependency.nit similarity index 98% rename from src/common_ffi/header_dependency.nit rename to src/ffi/header_dependency.nit index de247e5..485ba1f 100644 --- a/src/common_ffi/header_dependency.nit +++ b/src/ffi/header_dependency.nit @@ -53,7 +53,7 @@ redef class MModule # 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 diff --git a/src/common_ffi/java.nit b/src/ffi/java.nit similarity index 99% rename from src/common_ffi/java.nit rename to src/ffi/java.nit index 571c319..7be54ce 100644 --- a/src/common_ffi/java.nit +++ b/src/ffi/java.nit @@ -251,7 +251,7 @@ redef class MModule 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 @@ -408,7 +408,7 @@ redef class NitniCallback # 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 @@ -462,7 +462,7 @@ redef class MType 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" @@ -543,7 +543,7 @@ end 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 diff --git a/src/common_ffi/pkgconfig.nit b/src/ffi/pkgconfig.nit similarity index 89% rename from src/common_ffi/pkgconfig.nit rename to src/ffi/pkgconfig.nit index aa9add3..335d8d1 100644 --- a/src/common_ffi/pkgconfig.nit +++ b/src/ffi/pkgconfig.nit @@ -43,27 +43,29 @@ class PkgconfigPhase 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 diff --git a/src/frontend/check_annotation.nit b/src/frontend/check_annotation.nit index 367ba4d..41abe43 100644 --- a/src/frontend/check_annotation.nit +++ b/src/frontend/check_annotation.nit @@ -60,7 +60,7 @@ private class CheckAnnotationPhase 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 @@ -75,6 +75,7 @@ private class CheckAnnotationPhase var primtives_annotations_list = """ new_annotation +deprecated fixed lazy noinit @@ -83,6 +84,9 @@ writable cached nosuper old_style_init +abstract +intern +extern pkgconfig c_compiler_option @@ -116,7 +120,7 @@ platform 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 diff --git a/src/frontend/serialization_phase.nit b/src/frontend/serialization_phase.nit index 25574e7..7f0427d 100644 --- a/src/frontend/serialization_phase.nit +++ b/src/frontend/serialization_phase.nit @@ -122,7 +122,7 @@ private class SerializationPhasePreModel 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 @@ -186,11 +186,11 @@ 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 @@ -223,8 +223,7 @@ end 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 @@ -256,7 +255,7 @@ redef class AModule return null end - private var inits_to_retype = new Array[AConcreteInitPropdef] + private var inits_to_retype = new Array[AMethPropdef] end redef class AStdClassdef diff --git a/src/frontend/simple_misc_analysis.nit b/src/frontend/simple_misc_analysis.nit index 26d6710..a50b45b 100644 --- a/src/frontend/simple_misc_analysis.nit +++ b/src/frontend/simple_misc_analysis.nit @@ -54,9 +54,9 @@ private class SimpleMiscVisitor 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) @@ -81,7 +81,7 @@ redef class ASignature 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 @@ -94,7 +94,7 @@ 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 @@ -102,7 +102,7 @@ redef class AParExprs 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 @@ -141,7 +141,7 @@ redef class AWhileExpr 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 @@ -173,7 +173,7 @@ redef class AOnceExpr 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 diff --git a/src/highlight.nit b/src/highlight.nit index a93fec9..4922a79 100644 --- a/src/highlight.nit +++ b/src/highlight.nit @@ -27,13 +27,13 @@ class HighlightVisitor # Is the HTML include a nested `` 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 diff --git a/src/interpreter/naive_interpreter.nit b/src/interpreter/naive_interpreter.nit index cd264f1..d4c9173 100644 --- a/src/interpreter/naive_interpreter.nit +++ b/src/interpreter/naive_interpreter.nit @@ -501,6 +501,10 @@ private class NaiveInterpreter 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. @@ -671,14 +675,28 @@ redef class AMethPropdef 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 {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 @@ -986,14 +1004,7 @@ redef class AMethPropdef 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 {mpropdef}") - end - abort + return v.error_instance end end diff --git a/src/model/mdoc.nit b/src/model/mdoc.nit index 44ddfea..abc733a 100644 --- a/src/model/mdoc.nit +++ b/src/model/mdoc.nit @@ -26,10 +26,22 @@ class MDoc # 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 diff --git a/src/model/mmodule.nit b/src/model/mmodule.nit index 596ea9d..22e10c2 100644 --- a/src/model/mmodule.nit +++ b/src/model/mmodule.nit @@ -57,13 +57,12 @@ redef class MGroup # 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. @@ -73,12 +72,6 @@ class MModule # 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 @@ -124,20 +117,22 @@ class MModule 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 @@ -192,18 +187,6 @@ class MModule 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 @@ -224,7 +207,7 @@ class MModule # 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 diff --git a/src/model/model.nit b/src/model/model.nit index d4d2c1c..e0d941a 100644 --- a/src/model/model.nit +++ b/src/model/model.nit @@ -214,6 +214,9 @@ redef class MModule 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 @@ -1242,8 +1245,8 @@ end # 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 @@ -1818,18 +1821,18 @@ class MMethod # 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. @@ -1944,13 +1947,13 @@ class MMethodDef 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 # @@ -1960,13 +1963,13 @@ class MMethodDef 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 @@ -1982,7 +1985,7 @@ class MAttributeDef 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 @@ -1998,10 +2001,10 @@ class MVirtualTypeDef 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. diff --git a/src/model/model_base.nit b/src/model/model_base.nit index ef17543..9420ab8 100644 --- a/src/model/model_base.nit +++ b/src/model/model_base.nit @@ -46,6 +46,7 @@ end # * `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 diff --git a/src/model/model_viz.nit b/src/model/model_viz.nit index 20be8c3..a8a1345 100644 --- a/src/model/model_viz.nit +++ b/src/model/model_viz.nit @@ -154,10 +154,10 @@ class MProjectDot 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) diff --git a/src/model/mproject.nit b/src/model/mproject.nit index 0b8010e..72f2114 100644 --- a/src/model/mproject.nit +++ b/src/model/mproject.nit @@ -30,7 +30,7 @@ class MProject 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] @@ -81,7 +81,7 @@ class 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 diff --git a/src/model_utils.nit b/src/model_utils.nit index 51c643c..f184eec 100644 --- a/src/model_utils.nit +++ b/src/model_utils.nit @@ -25,7 +25,7 @@ redef class MConcern # 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` @@ -213,16 +213,6 @@ end 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] diff --git a/src/modelbuilder.nit b/src/modelbuilder.nit index eac98df..48bc6fa 100644 --- a/src/modelbuilder.nit +++ b/src/modelbuilder.nit @@ -630,6 +630,8 @@ class ModelBuilder var mdoc = ndoc.to_mdoc mmodule.mdoc = mdoc mdoc.original_mentity = mmodule + else + advice(decl, "missing-doc", "Documentation warning: Undocumented module `{mmodule}`") end end @@ -715,9 +717,16 @@ class ModelBuilder # 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` diff --git a/src/modelize/modelize_class.nit b/src/modelize/modelize_class.nit index ff0295f..8bc6ef2 100644 --- a/src/modelize/modelize_class.nit +++ b/src/modelize/modelize_class.nit @@ -133,7 +133,7 @@ redef class ModelBuilder 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) @@ -155,7 +155,7 @@ redef class ModelBuilder 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 @@ -182,6 +182,8 @@ redef class ModelBuilder 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 @@ -385,12 +387,12 @@ redef class ModelBuilder 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 diff --git a/src/modelize/modelize_property.nit b/src/modelize/modelize_property.nit index 57e847b..99ff6b4 100644 --- a/src/modelize/modelize_property.nit +++ b/src/modelize/modelize_property.nit @@ -337,7 +337,7 @@ 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 @@ -383,7 +383,7 @@ redef class APropdef 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 @@ -404,21 +404,34 @@ redef class APropdef 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 @@ -604,6 +617,10 @@ redef class AMethPropdef 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) @@ -624,7 +641,7 @@ redef class AMethPropdef var mpropdef = new MMethodDef(mclassdef, mprop, self.location) - set_doc(mpropdef) + set_doc(mpropdef, modelbuilder) self.mpropdef = mpropdef modelbuilder.mpropdef2npropdef[mpropdef] = self @@ -712,9 +729,9 @@ redef class AMethPropdef 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) @@ -789,20 +806,16 @@ redef class AAttrPropdef 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}.") @@ -812,114 +825,84 @@ redef class AAttrPropdef 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) @@ -977,8 +960,8 @@ redef class AAttrPropdef 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 @@ -998,11 +981,7 @@ redef class AAttrPropdef 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 @@ -1120,7 +1099,7 @@ redef class ATypePropdef 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 @@ -1134,7 +1113,7 @@ redef class ATypePropdef 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 @@ -1199,7 +1178,7 @@ redef class ATypePropdef 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 diff --git a/src/neo.nit b/src/neo.nit index f7ab770..70d593e 100644 --- a/src/neo.nit +++ b/src/neo.nit @@ -15,7 +15,8 @@ # 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`. # @@ -23,92 +24,168 @@ # # 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 @@ -625,9 +702,15 @@ class NeoModel 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))) @@ -668,9 +751,20 @@ class NeoModel 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") diff --git a/src/nit.nit b/src/nit.nit index 6e24920..af02fa2 100644 --- a/src/nit.nit +++ b/src/nit.nit @@ -22,7 +22,7 @@ import frontend # Create a tool context to handle options and paths var toolcontext = new ToolContext -toolcontext.tooldescription = "Usage: nit [OPTION]... ...\nInterprets and debbugs Nit programs." +toolcontext.tooldescription = "Usage: nit [OPTION]... ...\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) diff --git a/src/nitni/nitni_callbacks.nit b/src/nitni/nitni_callbacks.nit index cb75bc8..8af9779 100644 --- a/src/nitni/nitni_callbacks.nit +++ b/src/nitni/nitni_callbacks.nit @@ -33,7 +33,10 @@ class VerifyNitniCallbacksPhase 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 @@ -80,7 +83,7 @@ class ForeignCallbackSet end end -redef class AExternPropdef +redef class AMethPropdef private var foreign_callbacks_cache: nullable ForeignCallbackSet = null # All foreign callbacks from this method @@ -139,6 +142,8 @@ redef class AExternPropdef 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 diff --git a/src/nitpick.nit b/src/nitpick.nit new file mode 100644 index 0000000..c7664a9 --- /dev/null +++ b/src/nitpick.nit @@ -0,0 +1,52 @@ +# 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]... ...\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 diff --git a/src/nitpretty.nit b/src/nitpretty.nit index d49f60d..e7a733a 100644 --- a/src/nitpretty.nit +++ b/src/nitpretty.nit @@ -616,7 +616,11 @@ redef class AAnnotation 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 @@ -928,8 +932,7 @@ redef class AAttrPropdef 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 ":" @@ -937,16 +940,6 @@ redef class AAttrPropdef 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 "=" @@ -987,6 +980,10 @@ end 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 @@ -1004,94 +1001,13 @@ redef class AMethPropdef 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 @@ -1149,6 +1065,26 @@ redef class AConcreteMethPropdef 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 @@ -1903,34 +1839,6 @@ redef class AAttrReassignExpr 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 @@ -2228,6 +2136,10 @@ redef class AStarExpr 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 diff --git a/src/nitserial.nit b/src/nitserial.nit index 43907aa..5ad0aed 100644 --- a/src/nitserial.nit +++ b/src/nitserial.nit @@ -149,7 +149,7 @@ for mmodule in mmodules do 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" diff --git a/src/nituml.nit b/src/nituml.nit new file mode 100644 index 0000000..04cb4b3 --- /dev/null +++ b/src/nituml.nit @@ -0,0 +1,58 @@ +# 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) diff --git a/src/nitx.nit b/src/nitx.nit index 218f47b..f71a78e 100644 --- a/src/nitx.nit +++ b/src/nitx.nit @@ -780,35 +780,6 @@ redef class MDoc 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 diff --git a/src/parser/lexer.nit b/src/parser/lexer.nit index 5e50cff..e7d48a0 100644 --- a/src/parser/lexer.nit +++ b/src/parser/lexer.nit @@ -198,7 +198,7 @@ redef class TKwdo end end -redef class TKwreadable +redef class TKwvar redef fun parser_index: Int do return 16 @@ -210,7 +210,7 @@ redef class TKwreadable end end -redef class TKwwritable +redef class TKwextern redef fun parser_index: Int do return 17 @@ -222,7 +222,7 @@ redef class TKwwritable end end -redef class TKwvar +redef class TKwpublic redef fun parser_index: Int do return 18 @@ -234,7 +234,7 @@ redef class TKwvar end end -redef class TKwintern +redef class TKwprotected redef fun parser_index: Int do return 19 @@ -246,7 +246,7 @@ redef class TKwintern end end -redef class TKwextern +redef class TKwprivate redef fun parser_index: Int do return 20 @@ -258,7 +258,7 @@ redef class TKwextern end end -redef class TKwpublic +redef class TKwintrude redef fun parser_index: Int do return 21 @@ -270,7 +270,7 @@ redef class TKwpublic end end -redef class TKwprotected +redef class TKwif redef fun parser_index: Int do return 22 @@ -282,7 +282,7 @@ redef class TKwprotected end end -redef class TKwprivate +redef class TKwthen redef fun parser_index: Int do return 23 @@ -294,7 +294,7 @@ redef class TKwprivate end end -redef class TKwintrude +redef class TKwelse redef fun parser_index: Int do return 24 @@ -306,7 +306,7 @@ redef class TKwintrude end end -redef class TKwif +redef class TKwwhile redef fun parser_index: Int do return 25 @@ -318,7 +318,7 @@ redef class TKwif end end -redef class TKwthen +redef class TKwloop redef fun parser_index: Int do return 26 @@ -330,7 +330,7 @@ redef class TKwthen end end -redef class TKwelse +redef class TKwfor redef fun parser_index: Int do return 27 @@ -342,7 +342,7 @@ redef class TKwelse end end -redef class TKwwhile +redef class TKwin redef fun parser_index: Int do return 28 @@ -354,7 +354,7 @@ redef class TKwwhile end end -redef class TKwloop +redef class TKwand redef fun parser_index: Int do return 29 @@ -366,7 +366,7 @@ redef class TKwloop end end -redef class TKwfor +redef class TKwor redef fun parser_index: Int do return 30 @@ -378,7 +378,7 @@ redef class TKwfor end end -redef class TKwin +redef class TKwnot redef fun parser_index: Int do return 31 @@ -390,7 +390,7 @@ redef class TKwin end end -redef class TKwand +redef class TKwimplies redef fun parser_index: Int do return 32 @@ -402,7 +402,7 @@ redef class TKwand end end -redef class TKwor +redef class TKwreturn redef fun parser_index: Int do return 33 @@ -414,7 +414,7 @@ redef class TKwor end end -redef class TKwnot +redef class TKwcontinue redef fun parser_index: Int do return 34 @@ -426,7 +426,7 @@ redef class TKwnot end end -redef class TKwimplies +redef class TKwbreak redef fun parser_index: Int do return 35 @@ -438,7 +438,7 @@ redef class TKwimplies end end -redef class TKwreturn +redef class TKwabort redef fun parser_index: Int do return 36 @@ -450,7 +450,7 @@ redef class TKwreturn end end -redef class TKwcontinue +redef class TKwassert redef fun parser_index: Int do return 37 @@ -462,7 +462,7 @@ redef class TKwcontinue end end -redef class TKwbreak +redef class TKwnew redef fun parser_index: Int do return 38 @@ -474,7 +474,7 @@ redef class TKwbreak end end -redef class TKwabort +redef class TKwisa redef fun parser_index: Int do return 39 @@ -486,7 +486,7 @@ redef class TKwabort end end -redef class TKwassert +redef class TKwonce redef fun parser_index: Int do return 40 @@ -498,7 +498,7 @@ redef class TKwassert end end -redef class TKwnew +redef class TKwsuper redef fun parser_index: Int do return 41 @@ -510,7 +510,7 @@ redef class TKwnew end end -redef class TKwisa +redef class TKwself redef fun parser_index: Int do return 42 @@ -522,7 +522,7 @@ redef class TKwisa end end -redef class TKwonce +redef class TKwtrue redef fun parser_index: Int do return 43 @@ -534,7 +534,7 @@ redef class TKwonce end end -redef class TKwsuper +redef class TKwfalse redef fun parser_index: Int do return 44 @@ -546,7 +546,7 @@ redef class TKwsuper end end -redef class TKwself +redef class TKwnull redef fun parser_index: Int do return 45 @@ -558,7 +558,7 @@ redef class TKwself end end -redef class TKwtrue +redef class TKwas redef fun parser_index: Int do return 46 @@ -570,7 +570,7 @@ redef class TKwtrue end end -redef class TKwfalse +redef class TKwnullable redef fun parser_index: Int do return 47 @@ -582,7 +582,7 @@ redef class TKwfalse end end -redef class TKwnull +redef class TKwisset redef fun parser_index: Int do return 48 @@ -594,7 +594,7 @@ redef class TKwnull end end -redef class TKwas +redef class TKwlabel redef fun parser_index: Int do return 49 @@ -606,7 +606,7 @@ redef class TKwas end end -redef class TKwnullable +redef class TKwdebug redef fun parser_index: Int do return 50 @@ -618,7 +618,7 @@ redef class TKwnullable end end -redef class TKwisset +redef class TOpar redef fun parser_index: Int do return 51 @@ -630,7 +630,7 @@ redef class TKwisset end end -redef class TKwlabel +redef class TCpar redef fun parser_index: Int do return 52 @@ -642,7 +642,7 @@ redef class TKwlabel end end -redef class TKwdebug +redef class TObra redef fun parser_index: Int do return 53 @@ -654,7 +654,7 @@ redef class TKwdebug end end -redef class TOpar +redef class TCbra redef fun parser_index: Int do return 54 @@ -666,7 +666,7 @@ redef class TOpar end end -redef class TCpar +redef class TComma redef fun parser_index: Int do return 55 @@ -678,7 +678,7 @@ redef class TCpar end end -redef class TObra +redef class TColumn redef fun parser_index: Int do return 56 @@ -690,7 +690,7 @@ redef class TObra end end -redef class TCbra +redef class TQuad redef fun parser_index: Int do return 57 @@ -702,7 +702,7 @@ redef class TCbra end end -redef class TComma +redef class TAssign redef fun parser_index: Int do return 58 @@ -714,7 +714,7 @@ redef class TComma end end -redef class TColumn +redef class TPluseq redef fun parser_index: Int do return 59 @@ -726,7 +726,7 @@ redef class TColumn end end -redef class TQuad +redef class TMinuseq redef fun parser_index: Int do return 60 @@ -738,7 +738,7 @@ redef class TQuad end end -redef class TAssign +redef class TDotdotdot redef fun parser_index: Int do return 61 @@ -750,7 +750,7 @@ redef class TAssign end end -redef class TPluseq +redef class TDotdot redef fun parser_index: Int do return 62 @@ -762,7 +762,7 @@ redef class TPluseq end end -redef class TMinuseq +redef class TDot redef fun parser_index: Int do return 63 @@ -774,7 +774,7 @@ redef class TMinuseq end end -redef class TDotdotdot +redef class TPlus redef fun parser_index: Int do return 64 @@ -786,7 +786,7 @@ redef class TDotdotdot end end -redef class TDotdot +redef class TMinus redef fun parser_index: Int do return 65 @@ -798,7 +798,7 @@ redef class TDotdot end end -redef class TDot +redef class TStar redef fun parser_index: Int do return 66 @@ -810,7 +810,7 @@ redef class TDot end end -redef class TPlus +redef class TStarstar redef fun parser_index: Int do return 67 @@ -822,7 +822,7 @@ redef class TPlus end end -redef class TMinus +redef class TSlash redef fun parser_index: Int do return 68 @@ -834,7 +834,7 @@ redef class TMinus end end -redef class TStar +redef class TPercent redef fun parser_index: Int do return 69 @@ -846,7 +846,7 @@ redef class TStar end end -redef class TSlash +redef class TEq redef fun parser_index: Int do return 70 @@ -858,7 +858,7 @@ redef class TSlash end end -redef class TPercent +redef class TNe redef fun parser_index: Int do return 71 @@ -870,7 +870,7 @@ redef class TPercent end end -redef class TEq +redef class TLt redef fun parser_index: Int do return 72 @@ -882,7 +882,7 @@ redef class TEq end end -redef class TNe +redef class TLe redef fun parser_index: Int do return 73 @@ -894,7 +894,7 @@ redef class TNe end end -redef class TLt +redef class TLl redef fun parser_index: Int do return 74 @@ -906,7 +906,7 @@ redef class TLt end end -redef class TLe +redef class TGt redef fun parser_index: Int do return 75 @@ -918,7 +918,7 @@ redef class TLe end end -redef class TLl +redef class TGe redef fun parser_index: Int do return 76 @@ -930,7 +930,7 @@ redef class TLl end end -redef class TGt +redef class TGg redef fun parser_index: Int do return 77 @@ -942,7 +942,7 @@ redef class TGt end end -redef class TGe +redef class TStarship redef fun parser_index: Int do return 78 @@ -954,7 +954,7 @@ redef class TGe end end -redef class TGg +redef class TBang redef fun parser_index: Int do return 79 @@ -966,7 +966,7 @@ redef class TGg end end -redef class TStarship +redef class TAt redef fun parser_index: Int do return 80 @@ -978,7 +978,7 @@ redef class TStarship end end -redef class TBang +redef class TClassid redef fun parser_index: Int do return 81 @@ -990,7 +990,7 @@ redef class TBang end end -redef class TAt +redef class TId redef fun parser_index: Int do return 82 @@ -1002,7 +1002,7 @@ redef class TAt end end -redef class TClassid +redef class TAttrid redef fun parser_index: Int do return 83 @@ -1014,7 +1014,7 @@ redef class TClassid end end -redef class TId +redef class TNumber redef fun parser_index: Int do return 84 @@ -1026,7 +1026,7 @@ redef class TId end end -redef class TAttrid +redef class THexNumber redef fun parser_index: Int do return 85 @@ -1038,7 +1038,7 @@ redef class TAttrid end end -redef class TNumber +redef class TFloat redef fun parser_index: Int do return 86 @@ -1050,7 +1050,7 @@ redef class TNumber end end -redef class THexNumber +redef class TString redef fun parser_index: Int do return 87 @@ -1062,7 +1062,7 @@ redef class THexNumber end end -redef class TFloat +redef class TStartString redef fun parser_index: Int do return 88 @@ -1074,7 +1074,7 @@ redef class TFloat end end -redef class TString +redef class TMidString redef fun parser_index: Int do return 89 @@ -1086,7 +1086,7 @@ redef class TString end end -redef class TStartString +redef class TEndString redef fun parser_index: Int do return 90 @@ -1098,7 +1098,7 @@ redef class TStartString end end -redef class TMidString +redef class TChar redef fun parser_index: Int do return 91 @@ -1110,7 +1110,7 @@ redef class TMidString end end -redef class TEndString +redef class TBadString redef fun parser_index: Int do return 92 @@ -1122,7 +1122,7 @@ redef class TEndString end end -redef class TChar +redef class TBadChar redef fun parser_index: Int do return 93 @@ -1134,7 +1134,7 @@ redef class TChar end end -redef class TBadString +redef class TExternCodeSegment redef fun parser_index: Int do return 94 @@ -1146,27 +1146,11 @@ redef class TBadString 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 @@ -1222,246 +1206,240 @@ redef class Lexer 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` diff --git a/src/parser/lexer_work.nit b/src/parser/lexer_work.nit index e7102b6..2d93018 100644 --- a/src/parser/lexer_work.nit +++ b/src/parser/lexer_work.nit @@ -39,11 +39,6 @@ redef class Token end redef class EOF - redef fun parser_index: Int - do - return 97 - end - init init_tk(loc: Location) do _cached_text = "" diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index 52516c7..e26cf3b 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -110,10 +110,7 @@ kwinit = 'init'; kwredef = 'redef'; kwis = 'is'; kwdo = 'do'; -kwreadable = 'readable'; -kwwritable = 'writable'; kwvar = 'var'; -kwintern = 'intern'; kwextern = 'extern'; kwpublic = 'public'; kwprotected = 'protected'; @@ -165,6 +162,7 @@ dot = '.'; plus = '+'; minus = '-'; star = '*'; +starstar = '**'; slash = '/'; percent = '%'; eq = '=='; @@ -262,21 +260,15 @@ propdefs~toplevel {-> propdef} = 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} @@ -287,12 +279,6 @@ annotation_noend {-> 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)} @@ -307,6 +293,7 @@ methid {-> methid} | {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)} @@ -528,10 +515,15 @@ expr_add~nopar~nobra {-> expr} ; 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} @@ -547,17 +539,21 @@ expr_new~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)} @@ -568,10 +564,10 @@ expr_atom~nopar~nobra {-> expr} | {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} @@ -613,7 +609,22 @@ many_annotations {-> annotations} ; 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} @@ -633,10 +644,6 @@ line_annotation_forclass {-> annotation} | {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]} ; @@ -654,11 +661,9 @@ at_arg~nopar {-> 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 **********************************************************************/ @@ -772,25 +777,13 @@ formaldef = [id]:classid type? annotations?; 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?; @@ -835,6 +828,7 @@ expr = {block} expr* kwend? | {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 @@ -916,7 +910,7 @@ at_arg | {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; /*****************************************************************************/ diff --git a/src/parser/parser.nit b/src/parser/parser.nit index 924cb87..a5a2ff3 100644 --- a/src/parser/parser.nit +++ b/src/parser/parser.nit @@ -85,761 +85,761 @@ redef class Parser 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 @@ -2749,21 +2749,25 @@ private class ReduceAction57 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) @@ -2792,23 +2796,27 @@ private class ReduceAction58 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) @@ -2834,20 +2842,25 @@ private class ReduceAction59 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) @@ -2858,8 +2871,6 @@ private class ReduceAction60 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 @@ -2872,19 +2883,24 @@ private class ReduceAction60 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 @@ -2896,7 +2912,6 @@ private class ReduceAction61 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 @@ -2910,19 +2925,27 @@ private class ReduceAction61 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) @@ -2933,6 +2956,7 @@ private class ReduceAction62 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 @@ -2946,17 +2970,29 @@ private class ReduceAction62 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) @@ -2967,6 +3003,7 @@ private class ReduceAction63 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 @@ -2981,19 +3018,31 @@ private class ReduceAction63 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) @@ -3004,10 +3053,6 @@ private class ReduceAction64 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 @@ -3021,29 +3066,23 @@ private class ReduceAction64 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) @@ -3054,6 +3093,8 @@ private class ReduceAction65 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 @@ -3068,27 +3109,25 @@ private class ReduceAction65 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) @@ -3099,7 +3138,6 @@ private class ReduceAction66 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 @@ -3114,29 +3152,25 @@ private class ReduceAction66 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) @@ -3147,6 +3181,9 @@ private class ReduceAction67 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 @@ -3155,28 +3192,31 @@ private class ReduceAction67 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) @@ -3187,6 +3227,8 @@ private class ReduceAction68 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 @@ -3196,30 +3238,31 @@ private class ReduceAction68 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) @@ -3230,6 +3273,9 @@ private class ReduceAction69 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 @@ -3239,30 +3285,33 @@ private class ReduceAction69 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) @@ -3273,7 +3322,6 @@ private class ReduceAction70 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 @@ -3283,32 +3331,26 @@ private class ReduceAction70 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) @@ -3319,8 +3361,6 @@ private class ReduceAction71 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 @@ -3330,30 +3370,31 @@ private class ReduceAction71 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) @@ -3364,8 +3405,6 @@ private class ReduceAction72 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 @@ -3376,32 +3415,33 @@ private class ReduceAction72 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) @@ -3412,8 +3452,6 @@ private class ReduceAction73 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 @@ -3424,32 +3462,33 @@ private class ReduceAction73 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) @@ -3460,8 +3499,6 @@ private class ReduceAction74 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 @@ -3473,34 +3510,35 @@ private class ReduceAction74 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) @@ -3511,41 +3549,10 @@ private class ReduceAction75 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 @@ -3554,657 +3561,16 @@ private class ReduceAction76 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 @@ -4217,50 +3583,7 @@ private class ReduceAction94 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 @@ -4272,7 +3595,7 @@ private class ReduceAction97 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction98 +private class ReduceAction81 super ReduceAction redef fun action(p: Parser) do @@ -4288,7 +3611,7 @@ private class ReduceAction98 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction99 +private class ReduceAction82 super ReduceAction redef fun action(p: Parser) do @@ -4304,7 +3627,7 @@ private class ReduceAction99 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction100 +private class ReduceAction83 super ReduceAction redef fun action(p: Parser) do @@ -4320,7 +3643,7 @@ private class ReduceAction100 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction101 +private class ReduceAction84 super ReduceAction redef fun action(p: Parser) do @@ -4336,7 +3659,7 @@ private class ReduceAction101 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction102 +private class ReduceAction85 super ReduceAction redef fun action(p: Parser) do @@ -4351,7 +3674,7 @@ private class ReduceAction102 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction103 +private class ReduceAction86 super ReduceAction redef fun action(p: Parser) do @@ -4366,7 +3689,7 @@ private class ReduceAction103 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction104 +private class ReduceAction87 super ReduceAction redef fun action(p: Parser) do @@ -4381,7 +3704,7 @@ private class ReduceAction104 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction105 +private class ReduceAction88 super ReduceAction redef fun action(p: Parser) do @@ -4396,7 +3719,22 @@ private class ReduceAction105 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 @@ -4411,7 +3749,7 @@ private class ReduceAction106 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction107 +private class ReduceAction91 super ReduceAction redef fun action(p: Parser) do @@ -4426,7 +3764,7 @@ private class ReduceAction107 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction108 +private class ReduceAction92 super ReduceAction redef fun action(p: Parser) do @@ -4441,7 +3779,7 @@ private class ReduceAction108 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction109 +private class ReduceAction93 super ReduceAction redef fun action(p: Parser) do @@ -4456,7 +3794,7 @@ private class ReduceAction109 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction110 +private class ReduceAction94 super ReduceAction redef fun action(p: Parser) do @@ -4471,7 +3809,7 @@ private class ReduceAction110 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction111 +private class ReduceAction95 super ReduceAction redef fun action(p: Parser) do @@ -4486,7 +3824,7 @@ private class ReduceAction111 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction112 +private class ReduceAction96 super ReduceAction redef fun action(p: Parser) do @@ -4501,7 +3839,7 @@ private class ReduceAction112 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction113 +private class ReduceAction97 super ReduceAction redef fun action(p: Parser) do @@ -4516,7 +3854,7 @@ private class ReduceAction113 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction114 +private class ReduceAction98 super ReduceAction redef fun action(p: Parser) do @@ -4531,7 +3869,7 @@ private class ReduceAction114 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction115 +private class ReduceAction99 super ReduceAction redef fun action(p: Parser) do @@ -4546,7 +3884,7 @@ private class ReduceAction115 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction116 +private class ReduceAction100 super ReduceAction redef fun action(p: Parser) do @@ -4565,7 +3903,7 @@ private class ReduceAction116 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction117 +private class ReduceAction101 super ReduceAction redef fun action(p: Parser) do @@ -4580,7 +3918,7 @@ private class ReduceAction117 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction118 +private class ReduceAction102 super ReduceAction redef fun action(p: Parser) do @@ -4599,7 +3937,7 @@ private class ReduceAction118 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction119 +private class ReduceAction103 super ReduceAction redef fun action(p: Parser) do @@ -4622,7 +3960,7 @@ private class ReduceAction119 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction120 +private class ReduceAction104 super ReduceAction redef fun action(p: Parser) do @@ -4653,7 +3991,7 @@ private class ReduceAction120 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction121 +private class ReduceAction105 super ReduceAction redef fun action(p: Parser) do @@ -4681,7 +4019,7 @@ private class ReduceAction121 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction122 +private class ReduceAction106 super ReduceAction redef fun action(p: Parser) do @@ -4701,7 +4039,7 @@ private class ReduceAction122 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction123 +private class ReduceAction107 super ReduceAction redef fun action(p: Parser) do @@ -4718,7 +4056,7 @@ private class ReduceAction123 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction124 +private class ReduceAction108 super ReduceAction redef fun action(p: Parser) do @@ -4734,7 +4072,7 @@ private class ReduceAction124 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction125 +private class ReduceAction109 super ReduceAction redef fun action(p: Parser) do @@ -4754,7 +4092,7 @@ private class ReduceAction125 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction127 +private class ReduceAction111 super ReduceAction redef fun action(p: Parser) do @@ -4767,7 +4105,7 @@ private class ReduceAction127 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction128 +private class ReduceAction112 super ReduceAction redef fun action(p: Parser) do @@ -4788,7 +4126,7 @@ private class ReduceAction128 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction129 +private class ReduceAction113 super ReduceAction redef fun action(p: Parser) do @@ -4809,7 +4147,7 @@ private class ReduceAction129 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction130 +private class ReduceAction114 super ReduceAction redef fun action(p: Parser) do @@ -4833,7 +4171,7 @@ private class ReduceAction130 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction131 +private class ReduceAction115 super ReduceAction redef fun action(p: Parser) do @@ -4857,7 +4195,7 @@ private class ReduceAction131 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction132 +private class ReduceAction116 super ReduceAction redef fun action(p: Parser) do @@ -4884,7 +4222,7 @@ private class ReduceAction132 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction133 +private class ReduceAction117 super ReduceAction redef fun action(p: Parser) do @@ -4908,7 +4246,7 @@ private class ReduceAction133 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction134 +private class ReduceAction118 super ReduceAction redef fun action(p: Parser) do @@ -4936,7 +4274,7 @@ private class ReduceAction134 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction136 +private class ReduceAction120 super ReduceAction redef fun action(p: Parser) do @@ -4949,7 +4287,7 @@ private class ReduceAction136 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction137 +private class ReduceAction121 super ReduceAction redef fun action(p: Parser) do @@ -4960,7 +4298,7 @@ private class ReduceAction137 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction139 +private class ReduceAction123 super ReduceAction redef fun action(p: Parser) do @@ -4975,7 +4313,7 @@ private class ReduceAction139 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction140 +private class ReduceAction124 super ReduceAction redef fun action(p: Parser) do @@ -4990,7 +4328,7 @@ private class ReduceAction140 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction141 +private class ReduceAction125 super ReduceAction redef fun action(p: Parser) do @@ -5013,7 +4351,7 @@ private class ReduceAction141 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction142 +private class ReduceAction126 super ReduceAction redef fun action(p: Parser) do @@ -5028,7 +4366,7 @@ private class ReduceAction142 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction143 +private class ReduceAction127 super ReduceAction redef fun action(p: Parser) do @@ -5060,7 +4398,7 @@ private class ReduceAction143 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction144 +private class ReduceAction128 super ReduceAction redef fun action(p: Parser) do @@ -5088,7 +4426,7 @@ private class ReduceAction144 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction145 +private class ReduceAction129 super ReduceAction redef fun action(p: Parser) do @@ -5117,7 +4455,7 @@ private class ReduceAction145 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction146 +private class ReduceAction130 super ReduceAction redef fun action(p: Parser) do @@ -5142,7 +4480,7 @@ private class ReduceAction146 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction147 +private class ReduceAction131 super ReduceAction redef fun action(p: Parser) do @@ -5176,7 +4514,7 @@ private class ReduceAction147 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction148 +private class ReduceAction132 super ReduceAction redef fun action(p: Parser) do @@ -5206,7 +4544,7 @@ private class ReduceAction148 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction150 +private class ReduceAction134 super ReduceAction redef fun action(p: Parser) do @@ -5217,7 +4555,7 @@ private class ReduceAction150 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction151 +private class ReduceAction135 super ReduceAction redef fun action(p: Parser) do @@ -5238,7 +4576,7 @@ private class ReduceAction151 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction152 +private class ReduceAction136 super ReduceAction redef fun action(p: Parser) do @@ -5254,7 +4592,7 @@ private class ReduceAction152 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction153 +private class ReduceAction137 super ReduceAction redef fun action(p: Parser) do @@ -5273,7 +4611,7 @@ private class ReduceAction153 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction154 +private class ReduceAction138 super ReduceAction redef fun action(p: Parser) do @@ -5284,7 +4622,7 @@ private class ReduceAction154 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction156 +private class ReduceAction140 super ReduceAction redef fun action(p: Parser) do @@ -5296,7 +4634,7 @@ private class ReduceAction156 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction157 +private class ReduceAction141 super ReduceAction redef fun action(p: Parser) do @@ -5318,7 +4656,7 @@ private class ReduceAction157 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction158 +private class ReduceAction142 super ReduceAction redef fun action(p: Parser) do @@ -5343,7 +4681,7 @@ private class ReduceAction158 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction159 +private class ReduceAction143 super ReduceAction redef fun action(p: Parser) do @@ -5373,7 +4711,7 @@ private class ReduceAction159 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction160 +private class ReduceAction144 super ReduceAction redef fun action(p: Parser) do @@ -5406,7 +4744,7 @@ private class ReduceAction160 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction161 +private class ReduceAction145 super ReduceAction redef fun action(p: Parser) do @@ -5421,7 +4759,7 @@ private class ReduceAction161 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction162 +private class ReduceAction146 super ReduceAction redef fun action(p: Parser) do @@ -5440,7 +4778,7 @@ private class ReduceAction162 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction163 +private class ReduceAction147 super ReduceAction redef fun action(p: Parser) do @@ -5453,7 +4791,7 @@ private class ReduceAction163 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction167 +private class ReduceAction151 super ReduceAction redef fun action(p: Parser) do @@ -5465,7 +4803,7 @@ private class ReduceAction167 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction168 +private class ReduceAction152 super ReduceAction redef fun action(p: Parser) do @@ -5483,7 +4821,7 @@ private class ReduceAction168 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction169 +private class ReduceAction153 super ReduceAction redef fun action(p: Parser) do @@ -5500,7 +4838,7 @@ private class ReduceAction169 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction170 +private class ReduceAction154 super ReduceAction redef fun action(p: Parser) do @@ -5511,7 +4849,7 @@ private class ReduceAction170 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction171 +private class ReduceAction155 super ReduceAction redef fun action(p: Parser) do @@ -5531,7 +4869,7 @@ private class ReduceAction171 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction172 +private class ReduceAction156 super ReduceAction redef fun action(p: Parser) do @@ -5555,7 +4893,7 @@ private class ReduceAction172 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction173 +private class ReduceAction157 super ReduceAction redef fun action(p: Parser) do @@ -5576,7 +4914,7 @@ private class ReduceAction173 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction174 +private class ReduceAction158 super ReduceAction redef fun action(p: Parser) do @@ -5601,7 +4939,7 @@ private class ReduceAction174 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction175 +private class ReduceAction159 super ReduceAction redef fun action(p: Parser) do @@ -5625,7 +4963,7 @@ private class ReduceAction175 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction176 +private class ReduceAction160 super ReduceAction redef fun action(p: Parser) do @@ -5653,7 +4991,7 @@ private class ReduceAction176 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction180 +private class ReduceAction164 super ReduceAction redef fun action(p: Parser) do @@ -5669,7 +5007,7 @@ private class ReduceAction180 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction181 +private class ReduceAction165 super ReduceAction redef fun action(p: Parser) do @@ -5688,7 +5026,7 @@ private class ReduceAction181 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction182 +private class ReduceAction166 super ReduceAction redef fun action(p: Parser) do @@ -5704,7 +5042,7 @@ private class ReduceAction182 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction183 +private class ReduceAction167 super ReduceAction redef fun action(p: Parser) do @@ -5723,7 +5061,7 @@ private class ReduceAction183 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction184 +private class ReduceAction168 super ReduceAction redef fun action(p: Parser) do @@ -5738,7 +5076,7 @@ private class ReduceAction184 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction185 +private class ReduceAction169 super ReduceAction redef fun action(p: Parser) do @@ -5754,7 +5092,7 @@ private class ReduceAction185 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction186 +private class ReduceAction170 super ReduceAction redef fun action(p: Parser) do @@ -5773,7 +5111,7 @@ private class ReduceAction186 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction193 +private class ReduceAction177 super ReduceAction redef fun action(p: Parser) do @@ -5798,7 +5136,7 @@ private class ReduceAction193 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction194 +private class ReduceAction178 super ReduceAction redef fun action(p: Parser) do @@ -5819,7 +5157,7 @@ private class ReduceAction194 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction195 +private class ReduceAction179 super ReduceAction redef fun action(p: Parser) do @@ -5842,7 +5180,7 @@ private class ReduceAction195 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction196 +private class ReduceAction180 super ReduceAction redef fun action(p: Parser) do @@ -5867,7 +5205,7 @@ private class ReduceAction196 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction197 +private class ReduceAction181 super ReduceAction redef fun action(p: Parser) do @@ -5888,7 +5226,7 @@ private class ReduceAction197 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction198 +private class ReduceAction182 super ReduceAction redef fun action(p: Parser) do @@ -5914,7 +5252,7 @@ private class ReduceAction198 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction199 +private class ReduceAction183 super ReduceAction redef fun action(p: Parser) do @@ -5941,7 +5279,7 @@ private class ReduceAction199 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction201 +private class ReduceAction185 super ReduceAction redef fun action(p: Parser) do @@ -5963,7 +5301,7 @@ private class ReduceAction201 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction202 +private class ReduceAction186 super ReduceAction redef fun action(p: Parser) do @@ -5986,7 +5324,7 @@ private class ReduceAction202 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction204 +private class ReduceAction188 super ReduceAction redef fun action(p: Parser) do @@ -6014,7 +5352,7 @@ private class ReduceAction204 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction205 +private class ReduceAction189 super ReduceAction redef fun action(p: Parser) do @@ -6030,7 +5368,7 @@ private class ReduceAction205 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction206 +private class ReduceAction190 super ReduceAction redef fun action(p: Parser) do @@ -6049,7 +5387,7 @@ private class ReduceAction206 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction207 +private class ReduceAction191 super ReduceAction redef fun action(p: Parser) do @@ -6075,7 +5413,7 @@ private class ReduceAction207 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction208 +private class ReduceAction192 super ReduceAction redef fun action(p: Parser) do @@ -6104,7 +5442,7 @@ private class ReduceAction208 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction209 +private class ReduceAction193 super ReduceAction redef fun action(p: Parser) do @@ -6137,7 +5475,7 @@ private class ReduceAction209 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction210 +private class ReduceAction194 super ReduceAction redef fun action(p: Parser) do @@ -6173,7 +5511,7 @@ private class ReduceAction210 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction211 +private class ReduceAction195 super ReduceAction redef fun action(p: Parser) do @@ -6203,7 +5541,7 @@ private class ReduceAction211 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction212 +private class ReduceAction196 super ReduceAction redef fun action(p: Parser) do @@ -6229,7 +5567,7 @@ private class ReduceAction212 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction213 +private class ReduceAction197 super ReduceAction redef fun action(p: Parser) do @@ -6262,7 +5600,7 @@ private class ReduceAction213 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction214 +private class ReduceAction198 super ReduceAction redef fun action(p: Parser) do @@ -6291,7 +5629,7 @@ private class ReduceAction214 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction215 +private class ReduceAction199 super ReduceAction redef fun action(p: Parser) do @@ -6318,7 +5656,7 @@ private class ReduceAction215 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction216 +private class ReduceAction200 super ReduceAction redef fun action(p: Parser) do @@ -6348,7 +5686,7 @@ private class ReduceAction216 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction217 +private class ReduceAction201 super ReduceAction redef fun action(p: Parser) do @@ -6374,7 +5712,7 @@ private class ReduceAction217 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction218 +private class ReduceAction202 super ReduceAction redef fun action(p: Parser) do @@ -6407,7 +5745,7 @@ private class ReduceAction218 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction219 +private class ReduceAction203 super ReduceAction redef fun action(p: Parser) do @@ -6436,7 +5774,7 @@ private class ReduceAction219 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction220 +private class ReduceAction204 super ReduceAction redef fun action(p: Parser) do @@ -6463,7 +5801,7 @@ private class ReduceAction220 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction221 +private class ReduceAction205 super ReduceAction redef fun action(p: Parser) do @@ -6478,7 +5816,7 @@ private class ReduceAction221 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction222 +private class ReduceAction206 super ReduceAction redef fun action(p: Parser) do @@ -6493,7 +5831,7 @@ private class ReduceAction222 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction223 +private class ReduceAction207 super ReduceAction redef fun action(p: Parser) do @@ -6516,7 +5854,7 @@ private class ReduceAction223 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction224 +private class ReduceAction208 super ReduceAction redef fun action(p: Parser) do @@ -6536,7 +5874,7 @@ private class ReduceAction224 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction225 +private class ReduceAction209 super ReduceAction redef fun action(p: Parser) do @@ -6567,7 +5905,7 @@ private class ReduceAction225 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction226 +private class ReduceAction210 super ReduceAction redef fun action(p: Parser) do @@ -6594,7 +5932,7 @@ private class ReduceAction226 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction227 +private class ReduceAction211 super ReduceAction redef fun action(p: Parser) do @@ -6625,7 +5963,7 @@ private class ReduceAction227 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction228 +private class ReduceAction212 super ReduceAction redef fun action(p: Parser) do @@ -6652,7 +5990,7 @@ private class ReduceAction228 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction229 +private class ReduceAction213 super ReduceAction redef fun action(p: Parser) do @@ -6680,7 +6018,7 @@ private class ReduceAction229 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction232 +private class ReduceAction216 super ReduceAction redef fun action(p: Parser) do @@ -6703,7 +6041,7 @@ private class ReduceAction232 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction233 +private class ReduceAction217 super ReduceAction redef fun action(p: Parser) do @@ -6723,7 +6061,7 @@ private class ReduceAction233 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction234 +private class ReduceAction218 super ReduceAction redef fun action(p: Parser) do @@ -6756,7 +6094,7 @@ private class ReduceAction234 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction235 +private class ReduceAction219 super ReduceAction redef fun action(p: Parser) do @@ -6786,7 +6124,7 @@ private class ReduceAction235 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction236 +private class ReduceAction220 super ReduceAction redef fun action(p: Parser) do @@ -6832,7 +6170,7 @@ private class ReduceAction236 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction237 +private class ReduceAction221 super ReduceAction redef fun action(p: Parser) do @@ -6874,7 +6212,7 @@ private class ReduceAction237 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction238 +private class ReduceAction222 super ReduceAction redef fun action(p: Parser) do @@ -6917,7 +6255,7 @@ private class ReduceAction238 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction239 +private class ReduceAction223 super ReduceAction redef fun action(p: Parser) do @@ -6956,7 +6294,7 @@ private class ReduceAction239 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction240 +private class ReduceAction224 super ReduceAction redef fun action(p: Parser) do @@ -6981,7 +6319,7 @@ private class ReduceAction240 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction241 +private class ReduceAction225 super ReduceAction redef fun action(p: Parser) do @@ -7009,7 +6347,7 @@ private class ReduceAction241 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction242 +private class ReduceAction226 super ReduceAction redef fun action(p: Parser) do @@ -7030,7 +6368,7 @@ private class ReduceAction242 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction243 +private class ReduceAction227 super ReduceAction redef fun action(p: Parser) do @@ -7054,7 +6392,7 @@ private class ReduceAction243 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction244 +private class ReduceAction228 super ReduceAction redef fun action(p: Parser) do @@ -7066,7 +6404,7 @@ private class ReduceAction244 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction247 +private class ReduceAction231 super ReduceAction redef fun action(p: Parser) do @@ -7106,7 +6444,7 @@ private class ReduceAction247 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction249 +private class ReduceAction233 super ReduceAction redef fun action(p: Parser) do @@ -7127,7 +6465,7 @@ private class ReduceAction249 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction250 +private class ReduceAction234 super ReduceAction redef fun action(p: Parser) do @@ -7148,7 +6486,7 @@ private class ReduceAction250 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction251 +private class ReduceAction235 super ReduceAction redef fun action(p: Parser) do @@ -7170,7 +6508,7 @@ private class ReduceAction251 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction252 +private class ReduceAction236 super ReduceAction redef fun action(p: Parser) do @@ -7191,7 +6529,7 @@ private class ReduceAction252 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction254 +private class ReduceAction238 super ReduceAction redef fun action(p: Parser) do @@ -7211,7 +6549,7 @@ private class ReduceAction254 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction256 +private class ReduceAction240 super ReduceAction redef fun action(p: Parser) do @@ -7232,7 +6570,7 @@ private class ReduceAction256 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction257 +private class ReduceAction241 super ReduceAction redef fun action(p: Parser) do @@ -7253,7 +6591,7 @@ private class ReduceAction257 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction258 +private class ReduceAction242 super ReduceAction redef fun action(p: Parser) do @@ -7274,7 +6612,7 @@ private class ReduceAction258 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction259 +private class ReduceAction243 super ReduceAction redef fun action(p: Parser) do @@ -7295,7 +6633,7 @@ private class ReduceAction259 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction260 +private class ReduceAction244 super ReduceAction redef fun action(p: Parser) do @@ -7316,7 +6654,7 @@ private class ReduceAction260 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction261 +private class ReduceAction245 super ReduceAction redef fun action(p: Parser) do @@ -7337,7 +6675,7 @@ private class ReduceAction261 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction262 +private class ReduceAction246 super ReduceAction redef fun action(p: Parser) do @@ -7358,7 +6696,7 @@ private class ReduceAction262 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction263 +private class ReduceAction247 super ReduceAction redef fun action(p: Parser) do @@ -7379,7 +6717,7 @@ private class ReduceAction263 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction264 +private class ReduceAction248 super ReduceAction redef fun action(p: Parser) do @@ -7400,7 +6738,7 @@ private class ReduceAction264 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction265 +private class ReduceAction249 super ReduceAction redef fun action(p: Parser) do @@ -7421,7 +6759,7 @@ private class ReduceAction265 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction267 +private class ReduceAction251 super ReduceAction redef fun action(p: Parser) do @@ -7442,7 +6780,7 @@ private class ReduceAction267 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction268 +private class ReduceAction252 super ReduceAction redef fun action(p: Parser) do @@ -7463,7 +6801,7 @@ private class ReduceAction268 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction270 +private class ReduceAction254 super ReduceAction redef fun action(p: Parser) do @@ -7484,7 +6822,7 @@ private class ReduceAction270 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction271 +private class ReduceAction255 super ReduceAction redef fun action(p: Parser) do @@ -7505,7 +6843,7 @@ private class ReduceAction271 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction272 +private class ReduceAction256 super ReduceAction redef fun action(p: Parser) do @@ -7526,7 +6864,28 @@ private class ReduceAction272 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 @@ -7546,7 +6905,7 @@ private class ReduceAction274 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction275 +private class ReduceAction261 super ReduceAction redef fun action(p: Parser) do @@ -7566,7 +6925,7 @@ private class ReduceAction275 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction277 +private class ReduceAction263 super ReduceAction redef fun action(p: Parser) do @@ -7591,7 +6950,7 @@ private class ReduceAction277 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction278 +private class ReduceAction264 super ReduceAction redef fun action(p: Parser) do @@ -7617,7 +6976,7 @@ private class ReduceAction278 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction279 +private class ReduceAction265 super ReduceAction redef fun action(p: Parser) do @@ -7639,7 +6998,7 @@ private class ReduceAction279 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction280 +private class ReduceAction267 super ReduceAction redef fun action(p: Parser) do @@ -7661,7 +7020,7 @@ private class ReduceAction280 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction281 +private class ReduceAction268 super ReduceAction redef fun action(p: Parser) do @@ -7679,7 +7038,7 @@ private class ReduceAction281 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction287 +private class ReduceAction274 super ReduceAction redef fun action(p: Parser) do @@ -7698,7 +7057,7 @@ private class ReduceAction287 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction288 +private class ReduceAction275 super ReduceAction redef fun action(p: Parser) do @@ -7728,7 +7087,7 @@ private class ReduceAction288 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction289 +private class ReduceAction276 super ReduceAction redef fun action(p: Parser) do @@ -7743,32 +7102,34 @@ private class ReduceAction289 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 @@ -7779,47 +7140,83 @@ private class ReduceAction290 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 @@ -7838,7 +7235,7 @@ private class ReduceAction292 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction293 +private class ReduceAction281 super ReduceAction redef fun action(p: Parser) do @@ -7857,7 +7254,7 @@ private class ReduceAction293 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction294 +private class ReduceAction282 super ReduceAction redef fun action(p: Parser) do @@ -7876,7 +7273,7 @@ private class ReduceAction294 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction295 +private class ReduceAction283 super ReduceAction redef fun action(p: Parser) do @@ -7895,7 +7292,7 @@ private class ReduceAction295 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction296 +private class ReduceAction284 super ReduceAction redef fun action(p: Parser) do @@ -7914,7 +7311,7 @@ private class ReduceAction296 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction297 +private class ReduceAction285 super ReduceAction redef fun action(p: Parser) do @@ -7933,7 +7330,7 @@ private class ReduceAction297 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction298 +private class ReduceAction286 super ReduceAction redef fun action(p: Parser) do @@ -7952,7 +7349,7 @@ private class ReduceAction298 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction299 +private class ReduceAction287 super ReduceAction redef fun action(p: Parser) do @@ -7971,7 +7368,7 @@ private class ReduceAction299 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction300 +private class ReduceAction288 super ReduceAction redef fun action(p: Parser) do @@ -7990,7 +7387,7 @@ private class ReduceAction300 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction302 +private class ReduceAction290 super ReduceAction redef fun action(p: Parser) do @@ -8019,49 +7416,11 @@ private class ReduceAction302 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 @@ -8072,35 +7431,34 @@ private class ReduceAction304 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 @@ -8109,46 +7467,47 @@ private class ReduceAction305 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 @@ -8175,7 +7534,7 @@ private class ReduceAction307 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction308 +private class ReduceAction295 super ReduceAction redef fun action(p: Parser) do @@ -8206,7 +7565,7 @@ private class ReduceAction308 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction309 +private class ReduceAction296 super ReduceAction redef fun action(p: Parser) do @@ -8228,7 +7587,7 @@ private class ReduceAction309 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction310 +private class ReduceAction297 super ReduceAction redef fun action(p: Parser) do @@ -8244,7 +7603,7 @@ private class ReduceAction310 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction311 +private class ReduceAction298 super ReduceAction redef fun action(p: Parser) do @@ -8259,7 +7618,7 @@ private class ReduceAction311 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction314 +private class ReduceAction301 super ReduceAction redef fun action(p: Parser) do @@ -8274,7 +7633,7 @@ private class ReduceAction314 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction315 +private class ReduceAction302 super ReduceAction redef fun action(p: Parser) do @@ -8289,7 +7648,7 @@ private class ReduceAction315 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction316 +private class ReduceAction303 super ReduceAction redef fun action(p: Parser) do @@ -8314,7 +7673,7 @@ private class ReduceAction316 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction317 +private class ReduceAction304 super ReduceAction redef fun action(p: Parser) do @@ -8345,7 +7704,7 @@ private class ReduceAction317 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction318 +private class ReduceAction305 super ReduceAction redef fun action(p: Parser) do @@ -8356,7 +7715,7 @@ private class ReduceAction318 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction320 +private class ReduceAction307 super ReduceAction redef fun action(p: Parser) do @@ -8388,7 +7747,7 @@ private class ReduceAction320 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction321 +private class ReduceAction308 super ReduceAction redef fun action(p: Parser) do @@ -8432,7 +7791,7 @@ private class ReduceAction321 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction322 +private class ReduceAction309 super ReduceAction redef fun action(p: Parser) do @@ -8452,7 +7811,7 @@ private class ReduceAction322 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction323 +private class ReduceAction310 super ReduceAction redef fun action(p: Parser) do @@ -8467,7 +7826,7 @@ private class ReduceAction323 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction324 +private class ReduceAction311 super ReduceAction redef fun action(p: Parser) do @@ -8486,7 +7845,70 @@ private class ReduceAction324 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 @@ -8519,7 +7941,7 @@ private class ReduceAction326 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction327 +private class ReduceAction319 super ReduceAction redef fun action(p: Parser) do @@ -8555,7 +7977,7 @@ private class ReduceAction327 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction328 +private class ReduceAction320 super ReduceAction redef fun action(p: Parser) do @@ -8599,7 +8021,7 @@ private class ReduceAction328 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction329 +private class ReduceAction321 super ReduceAction redef fun action(p: Parser) do @@ -8646,7 +8068,7 @@ private class ReduceAction329 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction330 +private class ReduceAction322 super ReduceAction redef fun action(p: Parser) do @@ -8683,7 +8105,7 @@ private class ReduceAction330 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction331 +private class ReduceAction323 super ReduceAction redef fun action(p: Parser) do @@ -8710,7 +8132,7 @@ private class ReduceAction331 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction332 +private class ReduceAction324 super ReduceAction redef fun action(p: Parser) do @@ -8740,7 +8162,7 @@ private class ReduceAction332 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction333 +private class ReduceAction325 super ReduceAction redef fun action(p: Parser) do @@ -8778,7 +8200,7 @@ private class ReduceAction333 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction334 +private class ReduceAction326 super ReduceAction redef fun action(p: Parser) do @@ -8819,7 +8241,7 @@ private class ReduceAction334 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction335 +private class ReduceAction327 super ReduceAction redef fun action(p: Parser) do @@ -8850,20 +8272,7 @@ private class ReduceAction335 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 @@ -8878,7 +8287,7 @@ private class ReduceAction337 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction338 +private class ReduceAction329 super ReduceAction redef fun action(p: Parser) do @@ -8897,7 +8306,7 @@ private class ReduceAction338 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction339 +private class ReduceAction330 super ReduceAction redef fun action(p: Parser) do @@ -8910,7 +8319,7 @@ private class ReduceAction339 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction340 +private class ReduceAction331 super ReduceAction redef fun action(p: Parser) do @@ -8925,22 +8334,7 @@ private class ReduceAction340 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 @@ -8955,7 +8349,7 @@ private class ReduceAction343 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction344 +private class ReduceAction335 super ReduceAction redef fun action(p: Parser) do @@ -8970,37 +8364,37 @@ private class ReduceAction344 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 @@ -9026,7 +8420,7 @@ private class ReduceAction347 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction348 +private class ReduceAction339 super ReduceAction redef fun action(p: Parser) do @@ -9048,7 +8442,7 @@ private class ReduceAction348 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction349 +private class ReduceAction340 super ReduceAction redef fun action(p: Parser) do @@ -9061,7 +8455,7 @@ private class ReduceAction349 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction351 +private class ReduceAction342 super ReduceAction redef fun action(p: Parser) do @@ -9080,7 +8474,7 @@ private class ReduceAction351 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction354 +private class ReduceAction345 super ReduceAction redef fun action(p: Parser) do @@ -9106,7 +8500,7 @@ private class ReduceAction354 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction356 +private class ReduceAction347 super ReduceAction redef fun action(p: Parser) do @@ -9126,7 +8520,7 @@ private class ReduceAction356 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction357 +private class ReduceAction348 super ReduceAction redef fun action(p: Parser) do @@ -9140,7 +8534,7 @@ private class ReduceAction357 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction358 +private class ReduceAction349 super ReduceAction redef fun action(p: Parser) do @@ -9155,7 +8549,7 @@ private class ReduceAction358 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction359 +private class ReduceAction350 super ReduceAction redef fun action(p: Parser) do @@ -9177,7 +8571,7 @@ private class ReduceAction359 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction360 +private class ReduceAction351 super ReduceAction redef fun action(p: Parser) do @@ -9195,7 +8589,7 @@ private class ReduceAction360 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction361 +private class ReduceAction352 super ReduceAction redef fun action(p: Parser) do @@ -9217,7 +8611,7 @@ private class ReduceAction361 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction362 +private class ReduceAction353 super ReduceAction redef fun action(p: Parser) do @@ -9239,7 +8633,7 @@ private class ReduceAction362 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction363 +private class ReduceAction354 super ReduceAction redef fun action(p: Parser) do @@ -9265,7 +8659,7 @@ private class ReduceAction363 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction364 +private class ReduceAction355 super ReduceAction redef fun action(p: Parser) do @@ -9282,7 +8676,7 @@ private class ReduceAction364 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction365 +private class ReduceAction356 super ReduceAction redef fun action(p: Parser) do @@ -9303,7 +8697,7 @@ private class ReduceAction365 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction366 +private class ReduceAction357 super ReduceAction redef fun action(p: Parser) do @@ -9321,7 +8715,7 @@ private class ReduceAction366 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction368 +private class ReduceAction359 super ReduceAction redef fun action(p: Parser) do @@ -9332,7 +8726,7 @@ private class ReduceAction368 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction369 +private class ReduceAction360 super ReduceAction redef fun action(p: Parser) do @@ -9344,7 +8738,7 @@ private class ReduceAction369 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction370 +private class ReduceAction361 super ReduceAction redef fun action(p: Parser) do @@ -9357,7 +8751,7 @@ private class ReduceAction370 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction372 +private class ReduceAction363 super ReduceAction redef fun action(p: Parser) do @@ -9368,7 +8762,7 @@ private class ReduceAction372 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction373 +private class ReduceAction364 super ReduceAction redef fun action(p: Parser) do @@ -9380,7 +8774,7 @@ private class ReduceAction373 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction374 +private class ReduceAction365 super ReduceAction redef fun action(p: Parser) do @@ -9393,7 +8787,7 @@ private class ReduceAction374 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction376 +private class ReduceAction367 super ReduceAction redef fun action(p: Parser) do @@ -9406,7 +8800,7 @@ private class ReduceAction376 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction377 +private class ReduceAction368 super ReduceAction redef fun action(p: Parser) do @@ -9419,7 +8813,7 @@ private class ReduceAction377 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction379 +private class ReduceAction370 super ReduceAction redef fun action(p: Parser) do @@ -9430,7 +8824,7 @@ private class ReduceAction379 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction380 +private class ReduceAction371 super ReduceAction redef fun action(p: Parser) do @@ -9439,7 +8833,7 @@ private class ReduceAction380 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction382 +private class ReduceAction373 super ReduceAction redef fun action(p: Parser) do @@ -9456,7 +8850,7 @@ private class ReduceAction382 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction383 +private class ReduceAction374 super ReduceAction redef fun action(p: Parser) do @@ -9474,7 +8868,7 @@ private class ReduceAction383 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction386 +private class ReduceAction377 super ReduceAction redef fun action(p: Parser) do @@ -9485,7 +8879,7 @@ private class ReduceAction386 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction387 +private class ReduceAction378 super ReduceAction redef fun action(p: Parser) do @@ -9495,7 +8889,7 @@ private class ReduceAction387 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction388 +private class ReduceAction379 super ReduceAction redef fun action(p: Parser) do @@ -9506,7 +8900,7 @@ private class ReduceAction388 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction604 +private class ReduceAction602 super ReduceAction redef fun action(p: Parser) do @@ -9530,7 +8924,7 @@ private class ReduceAction604 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction605 +private class ReduceAction604 super ReduceAction redef fun action(p: Parser) do @@ -9550,7 +8944,7 @@ private class ReduceAction605 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction606 +private class ReduceAction605 super ReduceAction redef fun action(p: Parser) do @@ -9573,7 +8967,7 @@ private class ReduceAction606 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction608 +private class ReduceAction607 super ReduceAction redef fun action(p: Parser) do @@ -9596,7 +8990,7 @@ private class ReduceAction608 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction624 +private class ReduceAction623 super ReduceAction redef fun action(p: Parser) do @@ -9609,7 +9003,7 @@ private class ReduceAction624 p.push(p.go_to(_goto), node_list) end end -private class ReduceAction625 +private class ReduceAction624 super ReduceAction redef fun action(p: Parser) do diff --git a/src/parser/parser_abs.nit b/src/parser/parser_abs.nit index d10c615..9e74516 100644 --- a/src/parser/parser_abs.nit +++ b/src/parser/parser_abs.nit @@ -52,18 +52,9 @@ end 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 @@ -214,6 +205,9 @@ end class TStar super Token end +class TStarstar + super Token +end class TSlash super Token end @@ -317,7 +311,6 @@ class AClasskind super Prod 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 @@ -442,127 +435,44 @@ 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 @@ -579,6 +489,10 @@ class AStarMethid 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 @@ -854,6 +768,11 @@ class AStarExpr 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 @@ -1231,17 +1150,9 @@ class AKwexternAtid 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 diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 3cc5296..d335917 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -363,18 +363,9 @@ end 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 @@ -534,6 +525,9 @@ end class TStar super TokenOperator end +class TStarstar + super TokenOperator +end class TSlash super TokenOperator end @@ -832,26 +826,21 @@ class AAttrPropdef 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 @@ -859,7 +848,6 @@ abstract class AMethPropdef 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 @@ -876,57 +864,9 @@ abstract class AMethPropdef 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 @@ -991,25 +931,6 @@ class ATypePropdef 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 @@ -1031,6 +952,10 @@ class AStarMethid 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 @@ -1398,6 +1323,11 @@ class AStarExpr super ABinopExpr end +# A `**` expression +class AStarstarExpr + super ABinopExpr +end + # A `/` expression class ASlashExpr super ABinopExpr @@ -1834,16 +1764,10 @@ end 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 diff --git a/src/parser/parser_prod.nit b/src/parser/parser_prod.nit index c7125ee..384769c 100644 --- a/src/parser/parser_prod.nit +++ b/src/parser/parser_prod.nit @@ -836,40 +836,31 @@ 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) @@ -878,14 +869,6 @@ redef class AAttrPropdef 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 @@ -898,26 +881,22 @@ redef class AAttrPropdef 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) @@ -925,16 +904,6 @@ redef class AAttrPropdef _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 @@ -950,218 +919,21 @@ redef class AAttrPropdef _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 @@ -1174,730 +946,11 @@ redef class ADeferredMethPropdef 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 @@ -2049,101 +1102,176 @@ redef class ATypePropdef 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 @@ -2262,6 +1390,35 @@ redef class AStarMethid 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 @@ -4605,6 +3762,48 @@ redef class AStarExpr 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, @@ -7850,67 +7049,9 @@ redef class AKwexternAtid 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) @@ -7920,7 +7061,7 @@ redef class AKwwritableAtid 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 diff --git a/src/parser/tables_nit.c b/src/parser/tables_nit.c index 646ce11..e161f75 100644 --- a/src/parser/tables_nit.c +++ b/src/parser/tables_nit.c @@ -104,25 +104,29 @@ static const int lexer_goto_row10[] = { 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, @@ -130,199 +134,197 @@ static const int lexer_goto_row20[] = { }; 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, @@ -376,36 +378,32 @@ static const int lexer_goto_row62[] = { 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 @@ -420,16 +418,20 @@ static const int lexer_goto_row79[] = { }; 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, @@ -437,10 +439,6 @@ static const int lexer_goto_row82[] = { 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 @@ -454,248 +452,244 @@ static const int lexer_goto_row86[] = { 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, @@ -704,29 +698,29 @@ static const int lexer_goto_row125[] = { }; 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, @@ -734,75 +728,75 @@ static const int lexer_goto_row132[] = { }; 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, @@ -811,32 +805,32 @@ static const int lexer_goto_row152[] = { 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, @@ -845,21 +839,21 @@ static const int lexer_goto_row158[] = { 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, @@ -872,24 +866,24 @@ static const int lexer_goto_row163[] = { 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, @@ -898,26 +892,26 @@ static const int lexer_goto_row167[] = { 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, @@ -930,1003 +924,929 @@ static const int lexer_goto_row173[] = { 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 }; @@ -1944,7 +1864,7 @@ const int* const lexer_goto_table[] = { 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, @@ -1996,18 +1916,18 @@ const int* const lexer_goto_table[] = { 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, @@ -2134,12 +2054,12 @@ const int* const lexer_goto_table[] = { 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, @@ -2231,13 +2151,13 @@ const int* const lexer_goto_table[] = { 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, @@ -2279,35 +2199,22 @@ const int* const lexer_goto_table[] = { 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, @@ -2320,14 +2227,14 @@ static int parser_action_row3[] = { 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, @@ -2355,8 +2262,8 @@ static int parser_action_row11[] = { }; static int parser_action_row12[] = { 2, - -1, 1, 386, - 97, 1, 23 + -1, 1, 377, + 95, 1, 23 }; static int parser_action_row13[] = { 34, @@ -2364,40 +2271,40 @@ static int parser_action_row13[] = { 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[] = { @@ -2407,40 +2314,40 @@ 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, @@ -2452,86 +2359,86 @@ static int parser_action_row23[] = { 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, @@ -2539,271 +2446,271 @@ static int parser_action_row28[] = { }; 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, @@ -2815,12366 +2722,12156 @@ static int parser_action_row62[] = { }; 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[] = { @@ -16714,44 +16411,7 @@ 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[] = { @@ -16765,39 +16425,39 @@ static int parser_goto_row2[] = { 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, @@ -16808,1369 +16468,1362 @@ static int parser_goto_row7[] = { -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, @@ -18179,539 +17832,536 @@ static int parser_goto_row102[] = { 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, @@ -18730,119 +18380,110 @@ static int parser_goto_row148[] = { -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, @@ -18854,159 +18495,204 @@ static int parser_goto_row170[] = { }; 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[] = { @@ -19199,5 +18885,14 @@ 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 }; diff --git a/src/parser/xss/tokens.xss b/src/parser/xss/tokens.xss index a5536fd..c1b37cb 100644 --- a/src/parser/xss/tokens.xss +++ b/src/parser/xss/tokens.xss @@ -54,4 +54,12 @@ end $ end if $ end foreach + +redef class EOF + redef fun parser_index: Int + do + return ${tokens/eof/@parser_index} + end +end + $ end template diff --git a/src/phase.nit b/src/phase.nit index 7cefaf0..d1cc1cb 100644 --- a/src/phase.nit +++ b/src/phase.nit @@ -71,6 +71,9 @@ redef class ToolContext 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 @@ -85,6 +88,9 @@ redef class ToolContext 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 @@ -106,7 +112,7 @@ redef class ToolContext 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 @@ -126,6 +132,13 @@ redef class ToolContext 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 diff --git a/src/rapid_type_analysis.nit b/src/rapid_type_analysis.nit index ea0dcaf..3d8fb9e 100644 --- a/src/rapid_type_analysis.nit +++ b/src/rapid_type_analysis.nit @@ -204,6 +204,7 @@ class RapidTypeAnalysis force_alive("Int") force_alive("Float") force_alive("Char") + force_alive("Pointer") while not todo.is_empty do var mmethoddef = todo.shift diff --git a/src/semantize/scope.nit b/src/semantize/scope.nit index 83c5fe4..5048b33 100644 --- a/src/semantize/scope.nit +++ b/src/semantize/scope.nit @@ -36,6 +36,12 @@ class Variable # 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. @@ -77,6 +83,18 @@ private class ScopeVisitor # 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 @@ -88,6 +106,7 @@ private class ScopeVisitor return false end scopes.first.variables[name] = variable + variable.location = node.location return true end @@ -118,7 +137,7 @@ private class ScopeVisitor scope.escapemark = escapemark scopes.unshift(scope) enter_visit(node) - scopes.shift + shift_scope end # Look for a label `name`. @@ -232,6 +251,7 @@ redef class APropdef do var v = new ScopeVisitor(toolcontext) v.enter_visit(self) + v.shift_scope end end @@ -257,6 +277,7 @@ redef class AVardeclExpr 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 @@ -370,7 +391,7 @@ redef class AForExpr self.escapemark = escapemark v.enter_visit_block(n_block, escapemark) - v.scopes.shift + v.shift_scope end end @@ -409,6 +430,7 @@ end redef class ACallExpr redef fun variable_create(variable) do + variable.warn_unread = false return new AVarExpr.init_avarexpr(n_id) end end @@ -423,6 +445,7 @@ 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 diff --git a/src/semantize/typing.nit b/src/semantize/typing.nit index 462fe04..8851413 100644 --- a/src/semantize/typing.nit +++ b/src/semantize/typing.nit @@ -188,9 +188,9 @@ private class TypeVisitor 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 @@ -262,6 +262,16 @@ private class TypeVisitor 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 @@ -270,7 +280,7 @@ private class TypeVisitor 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 @@ -1202,13 +1212,13 @@ redef class AAsNotnullExpr 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 @@ -1355,6 +1365,9 @@ 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 @@ -1728,7 +1741,7 @@ redef class ADebugTypeExpr 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 diff --git a/src/test_markdown.nit b/src/test_docdown.nit similarity index 99% rename from src/test_markdown.nit rename to src/test_docdown.nit index 9d73b67..c546c2e 100644 --- a/src/test_markdown.nit +++ b/src/test_docdown.nit @@ -13,7 +13,7 @@ # limitations under the License. # Program to test the `markdown` module on real source files. -module test_markdown +module test_docdown import modelize import highlight diff --git a/src/test_neo.nit b/src/test_neo.nit index 37adf04..45015a7 100644 --- a/src/test_neo.nit +++ b/src/test_neo.nit @@ -57,34 +57,49 @@ read_model.load(neo_model) # 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 diff --git a/src/testing/testing_doc.nit b/src/testing/testing_doc.nit index e370b8a..fe37ca9 100644 --- a/src/testing/testing_doc.nit +++ b/src/testing/testing_doc.nit @@ -51,8 +51,8 @@ class NitUnitExecutor # 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 @@ -63,7 +63,7 @@ class NitUnitExecutor 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 @@ -156,13 +156,13 @@ class NitUnitExecutor 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 diff --git a/src/testing/testing_suite.nit b/src/testing/testing_suite.nit index 30cbed5..28e6945 100644 --- a/src/testing/testing_suite.nit +++ b/src/testing/testing_suite.nit @@ -231,7 +231,7 @@ class TestCase 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 @@ -252,7 +252,7 @@ class TestCase 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 diff --git a/src/toolcontext.nit b/src/toolcontext.nit index 5bfd18d..1bdcea5 100644 --- a/src/toolcontext.nit +++ b/src/toolcontext.nit @@ -17,7 +17,7 @@ # 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 @@ -25,11 +25,24 @@ import location 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. @@ -59,13 +72,19 @@ class Message 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 @@ -101,13 +120,24 @@ class ToolContext 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 @@ -119,11 +149,41 @@ class ToolContext 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 @@ -213,14 +273,14 @@ class ToolContext # 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`. diff --git a/src/uml/uml.nit b/src/uml/uml.nit new file mode 100644 index 0000000..0403540 --- /dev/null +++ b/src/uml/uml.nit @@ -0,0 +1,20 @@ +# 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 diff --git a/src/uml/uml_base.nit b/src/uml/uml_base.nit new file mode 100644 index 0000000..e54ccef --- /dev/null +++ b/src/uml/uml_base.nit @@ -0,0 +1,38 @@ +# 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 diff --git a/src/uml/uml_class.nit b/src/uml/uml_class.nit new file mode 100644 index 0000000..7581f2a --- /dev/null +++ b/src/uml/uml_class.nit @@ -0,0 +1,232 @@ +# 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 diff --git a/src/uml/uml_module.nit b/src/uml/uml_module.nit new file mode 100644 index 0000000..55d16f3 --- /dev/null +++ b/src/uml/uml_module.nit @@ -0,0 +1,158 @@ +# 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 diff --git a/src/vm.nit b/src/vm.nit index 7e87f8c..a58a4a8 100644 --- a/src/vm.nit +++ b/src/vm.nit @@ -44,6 +44,16 @@ class VirtualMachine super NaiveInterpreter # 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 @@ -71,7 +81,7 @@ class VirtualMachine super NaiveInterpreter 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 @@ -124,11 +134,11 @@ class VirtualMachine super NaiveInterpreter // 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 @@ -137,81 +147,87 @@ class VirtualMachine super NaiveInterpreter 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 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 @@ -348,11 +485,34 @@ end # 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 @@ -377,7 +537,7 @@ end 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) @@ -386,7 +546,7 @@ class MemoryManager 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 @@ -396,7 +556,7 @@ class MemoryManager for(i = 0; i +`} + +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); `} diff --git a/tests/sav/fixme/nitpretty_args22.res b/tests/sav/fixme/nitpretty_args22.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/fixme/nitpretty_args22.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/nit.res b/tests/sav/nit.res index a61c3d8..6dae4e5 100644 --- a/tests/sav/nit.res +++ b/tests/sav/nit.res @@ -1,3 +1,3 @@ Usage: nit [OPTION]... ... -Interprets and debbugs Nit programs. +Interprets and debugs Nit programs. Use --help for help diff --git a/tests/sav/nitlight_args1.res b/tests/sav/nitlight_args1.res index 6a4d282..33325f6 100644 --- a/tests/sav/nitlight_args1.res +++ b/tests/sav/nitlight_args1.res @@ -23,7 +23,7 @@ end enum Int - fun output is intern + fun output is intern end class A diff --git a/tests/sav/nitmd.res b/tests/sav/nitmd.res new file mode 100644 index 0000000..3d4be6f --- /dev/null +++ b/tests/sav/nitmd.res @@ -0,0 +1 @@ +usage: nitmd diff --git a/tests/sav/nitmetrics_args1.res b/tests/sav/nitmetrics_args1.res index 979a95a..e706f2c 100644 --- a/tests/sav/nitmetrics_args1.res +++ b/tests/sav/nitmetrics_args1.res @@ -372,73 +372,74 @@ Distribution of direct smallers <=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 diff --git a/tests/sav/nitpick.res b/tests/sav/nitpick.res new file mode 100644 index 0000000..8d05ccb --- /dev/null +++ b/tests/sav/nitpick.res @@ -0,0 +1,3 @@ +Usage: nitpick [OPTION]... ... +Collect potential style and code issues. +Use --help for help diff --git a/tests/sav/nitpretty_args22.res b/tests/sav/nitpretty_args22.res index b04cd1d..e3183bb 100644 --- a/tests/sav/nitpretty_args22.res +++ b/tests/sav/nitpretty_args22.res @@ -19,11 +19,11 @@ class A 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 diff --git a/tests/sav/nitpretty_args23.res b/tests/sav/nitpretty_args23.res index 5b727f7..08a4d49 100644 --- a/tests/sav/nitpretty_args23.res +++ b/tests/sav/nitpretty_args23.res @@ -13,10 +13,10 @@ # 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) diff --git a/tests/sav/nituml.res b/tests/sav/nituml.res new file mode 100644 index 0000000..e50ad70 --- /dev/null +++ b/tests/sav/nituml.res @@ -0,0 +1,2 @@ +Usage: [OPTION]... [ARG]... +Use --help for help diff --git a/tests/sav/nituml_args1.res b/tests/sav/nituml_args1.res new file mode 100644 index 0000000..ecae7b8 --- /dev/null +++ b/tests/sav/nituml_args1.res @@ -0,0 +1,22 @@ +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" +] +} +} diff --git a/tests/sav/nituml_args2.res b/tests/sav/nituml_args2.res new file mode 100644 index 0000000..5a9488d --- /dev/null +++ b/tests/sav/nituml_args2.res @@ -0,0 +1,19 @@ +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" +] +} +} diff --git a/tests/sav/nituml_args3.res b/tests/sav/nituml_args3.res new file mode 100644 index 0000000..af28f14 --- /dev/null +++ b/tests/sav/nituml_args3.res @@ -0,0 +1,84 @@ +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]; + +} diff --git a/tests/sav/nituml_args4.res b/tests/sav/nituml_args4.res new file mode 100644 index 0000000..6189897 --- /dev/null +++ b/tests/sav/nituml_args4.res @@ -0,0 +1,74 @@ +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]; + +} diff --git a/tests/sav/test_markdown.res b/tests/sav/test_docdown.res similarity index 100% rename from tests/sav/test_markdown.res rename to tests/sav/test_docdown.res diff --git a/tests/sav/test_markdown_args1.res b/tests/sav/test_docdown_args1.res similarity index 100% rename from tests/sav/test_markdown_args1.res rename to tests/sav/test_docdown_args1.res diff --git a/tests/sav/test_ffi_c_polymorphism.res b/tests/sav/test_ffi_c_polymorphism.res new file mode 100644 index 0000000..de98044 --- /dev/null +++ b/tests/sav/test_ffi_c_polymorphism.res @@ -0,0 +1,3 @@ +a +b +c diff --git a/tests/sav/test_ffi_c_polymorphism_alt1.res b/tests/sav/test_ffi_c_polymorphism_alt1.res new file mode 100644 index 0000000..a2c2d95 --- /dev/null +++ b/tests/sav/test_ffi_c_polymorphism_alt1.res @@ -0,0 +1 @@ +alt/test_ffi_c_polymorphism_alt1.nit:56,15--25: Type error: expected NativeB, got NativeA diff --git a/tests/sav/test_ffi_c_polymorphism_alt2.res b/tests/sav/test_ffi_c_polymorphism_alt2.res new file mode 100644 index 0000000..58254a5 --- /dev/null +++ b/tests/sav/test_ffi_c_polymorphism_alt2.res @@ -0,0 +1 @@ +alt/test_ffi_c_polymorphism_alt2.nit:58,12--22: Type error: expected NativeB, got NativeA diff --git a/tests/sav/test_neo_args1.res b/tests/sav/test_neo_args1.res index 5291a1e..6106689 100644 --- a/tests/sav/test_neo_args1.res +++ b/tests/sav/test_neo_args1.res @@ -1,12 +1,136 @@ -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 diff --git a/tests/sav/test_parser_args1.res b/tests/sav/test_parser_args1.res index 3134b52..d5ff252 100644 --- a/tests/sav/test_parser_args1.res +++ b/tests/sav/test_parser_args1.res @@ -35,7 +35,7 @@ Start ../src/test_parser.nit:17,1--147,1 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 diff --git a/tests/sav/test_parser_args7.res b/tests/sav/test_parser_args7.res index 10b0795..fdfc9f0 100644 --- a/tests/sav/test_parser_args7.res +++ b/tests/sav/test_parser_args7.res @@ -26,7 +26,7 @@ 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 @@ -53,7 +53,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 diff --git a/tests/sav/test_return.res b/tests/sav/test_return.res index b3dd2f3..2101194 100644 --- a/tests/sav/test_return.res +++ b/tests/sav/test_return.res @@ -1,4 +1,4 @@ -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 diff --git a/tests/sav/xymus_net.res b/tests/sav/xymus_net.res new file mode 100644 index 0000000..a2c25d2 --- /dev/null +++ b/tests/sav/xymus_net.res @@ -0,0 +1,2 @@ +../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 diff --git a/tests/test_ffi_c_polymorphism.nit b/tests/test_ffi_c_polymorphism.nit new file mode 100644 index 0000000..e66fdbc --- /dev/null +++ b/tests/test_ffi_c_polymorphism.nit @@ -0,0 +1,58 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Alexis Laferrière +# +# 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 diff --git a/tests/test_pretty/test_attr1.nit b/tests/test_pretty/test_attr1.nit index e14cef2..ec9f14d 100644 --- a/tests/test_pretty/test_attr1.nit +++ b/tests/test_pretty/test_attr1.nit @@ -23,10 +23,10 @@ class A # 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 diff --git a/tests/test_pretty/test_attr2.nit b/tests/test_pretty/test_attr2.nit index 5b727f7..08a4d49 100644 --- a/tests/test_pretty/test_attr2.nit +++ b/tests/test_pretty/test_attr2.nit @@ -13,10 +13,10 @@ # 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) diff --git a/tests/test_prog/rpg/character.nit b/tests/test_prog/rpg/character.nit index a494875..d97bf9a 100644 --- a/tests/test_prog/rpg/character.nit +++ b/tests/test_prog/rpg/character.nit @@ -26,7 +26,7 @@ class Character # 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