From: Jean Privat Date: Wed, 18 Jun 2014 01:58:58 +0000 (-0400) Subject: Merge: Use more intern methods and add intern factories for NativeString and NativeArray X-Git-Tag: v0.6.6~25 X-Git-Url: http://nitlanguage.org?hp=842cb56c7ce9c3eb6ca8b5c28a539de1aee096c9 Merge: Use more intern methods and add intern factories for NativeString and NativeArray The first commits enhance the parser to accept top-level intern methods (needed for `exit`) and intern `new` factories (analogous to extern `new` factories). Thus fix #493 The rest of the series implements two intern `new` factories, one for NativeString and one for NativeArray. However, because the compiler in c_src cannot obviously parse the new syntax yet, the standard library is not updated. So consider the file `test_new_native.nit` as a technology preview. Pull-Request: #498 Reviewed-by: Lucas Bajolet --- diff --git a/examples/emscripten/README.md b/examples/emscripten/README.md new file mode 100644 index 0000000..0d84b15 --- /dev/null +++ b/examples/emscripten/README.md @@ -0,0 +1,9 @@ +# Hello world + +Minimal example using the standard Nit hello world program. The Nit code will be evaluated and executed once as soon as it is loaded. Standard output is redirected to the `console` element. + +# Fibonacci + +The Nit program is executed only when an input is supplied. The input is passed as the main arguments. + +This is not ideal, the whole Nit program is executed at each call. diff --git a/examples/emscripten/fibonacci/Makefile b/examples/emscripten/fibonacci/Makefile new file mode 100644 index 0000000..4ec01ea --- /dev/null +++ b/examples/emscripten/fibonacci/Makefile @@ -0,0 +1,2 @@ +emscripten: + ../../../bin/nitg -o www/fibonacci.js ../../fibonacci.nit -m emscripten diff --git a/examples/emscripten/fibonacci/www/index.html b/examples/emscripten/fibonacci/www/index.html new file mode 100644 index 0000000..e0195f6 --- /dev/null +++ b/examples/emscripten/fibonacci/www/index.html @@ -0,0 +1,73 @@ + + + + + Fibonacci + + + + + + + +
+

Fibonacci calculator

+ Nit source
+ HTML source + +

Status

+

Loading...

+ +

Program Input

+ + +

Program Output

+ + + +
+ + + diff --git a/examples/emscripten/hello_world/Makefile b/examples/emscripten/hello_world/Makefile new file mode 100644 index 0000000..5fea224 --- /dev/null +++ b/examples/emscripten/hello_world/Makefile @@ -0,0 +1,2 @@ +emscripten: + ../../../bin/nitg -o www/hello_world.js ../../hello_world.nit -m emscripten diff --git a/examples/emscripten/hello_world/www/index.html b/examples/emscripten/hello_world/www/index.html new file mode 100644 index 0000000..0820561 --- /dev/null +++ b/examples/emscripten/hello_world/www/index.html @@ -0,0 +1,48 @@ + + + + + + + + + + +

Status

+

Loading...

+ +

Program output

+ + + + + + diff --git a/examples/mnit_ballz/src/ballz_android.nit b/examples/mnit_ballz/src/ballz_android.nit index 18e1b84..823edd9 100644 --- a/examples/mnit_ballz/src/ballz_android.nit +++ b/examples/mnit_ballz/src/ballz_android.nit @@ -16,15 +16,12 @@ module ballz_android -import realtime import game_logic redef class App var screen: nullable Screen - var target_dt = 20000000 - redef fun run do sensors_support_enabled = true @@ -34,6 +31,7 @@ redef class App gyroscope.enabled = true light.enabled = true proximity.enabled = true + maximum_fps = 50 super end @@ -48,16 +46,8 @@ redef class App do var screen = self.screen if screen != null then - var clock = new Clock - screen.game.do_turn screen.do_frame(display) - - var dt = clock.lapse - if dt.sec == 0 and dt.nanosec < target_dt then - var sleep_t = target_dt - dt.nanosec - sys.nanosleep(0, sleep_t) - end end end diff --git a/examples/mnit_dino/src/dino.nit b/examples/mnit_dino/src/dino.nit index 23314f8..11efd91 100644 --- a/examples/mnit_dino/src/dino.nit +++ b/examples/mnit_dino/src/dino.nit @@ -21,7 +21,6 @@ module dino is end import mnit -import realtime import graphism import fancy_dino @@ -31,8 +30,6 @@ redef class App var cavemen_at_first_level = 6 var cavemen_incr = 4 - var target_dt = 12000000 - var game : nullable Game = null var score = new Container[Int](0) var imgs : nullable ImageSet = null @@ -42,6 +39,8 @@ redef class App do super + maximum_fps = 80 + var display = display assert display != null @@ -59,16 +58,8 @@ redef class App do var game = game if game != null then - var clock = new Clock - var turn = game.do_turn game.draw( display, imgs.as(not null), turn ) - - var dt = clock.lapse - if dt.sec == 0 and dt.nanosec < target_dt then - var sleep_t = target_dt - dt.nanosec - sys.nanosleep(0, sleep_t) - end else splash.draw( display, true ) end diff --git a/examples/mnit_moles/src/moles.nit b/examples/mnit_moles/src/moles.nit index a0d783a..08642d1 100644 --- a/examples/mnit_moles/src/moles.nit +++ b/examples/mnit_moles/src/moles.nit @@ -20,7 +20,6 @@ module moles import mnit -import realtime class Hole var game: Game @@ -231,12 +230,11 @@ redef class App var screen: nullable Screen = null - var target_dt = 20000000 - redef fun window_created do super + maximum_fps = 50 init_screen_and_game end @@ -246,16 +244,8 @@ redef class App do var screen = self.screen if screen != null then - var clock = new Clock - screen.game.do_turn screen.do_frame(display) - - var dt = clock.lapse - if dt.sec == 0 and dt.nanosec < target_dt then - var sleep_t = target_dt - dt.nanosec - sys.nanosleep(0, sleep_t) - end end end diff --git a/examples/mnit_simple/src/simple_android.nit b/examples/mnit_simple/src/simple_android.nit index 157bc7e..1f17806 100644 --- a/examples/mnit_simple/src/simple_android.nit +++ b/examples/mnit_simple/src/simple_android.nit @@ -21,6 +21,7 @@ end import simple import mnit_android +import android::shared_preferences in "Java" `{ import android.content.Context; @@ -30,11 +31,54 @@ in "Java" `{ redef class App redef fun input( ie ) do - if ie isa PointerEvent and ie.depressed then do_java_stuff - + if ie isa PointerEvent and ie.depressed then + do_java_stuff + test_shared_preferences + end return super end + fun test_shared_preferences + do + # Private mode tests + var sp = new SharedPreferences.privately(self, "test") + sp.add_bool("a_boolean", true) + sp.add_float("a_float", 66.6) + sp.add_int("an_int", 666) + sp.add_int("a_second_int", 666777) + sp.add_long("a_long", 6666666666) + sp.add_string("a_string", "A string") + sp["another_int"] = 85 + sp["yet_another_string"] = "Another string" + sp.remove("a_second_int") + + # Serialized object test + var my_point = new Point(10, 10) + sp["a_point"] = my_point + var my_deserialized_point = sp.deserialize("a_point") + assert my_point.to_s == my_deserialized_point.to_s + + assert sp.bool("a_boolean", false) == true + assert sp.bool("wrong_boolean", false) == false + assert sp.float("a_float", 0.0) != 0.0 + assert sp.float("wrong_float", 0.0) == 0.0 + assert sp.int("an_int", 0) == 666 + assert sp.int("a_second_int", 0) == 0 + assert sp.long("a_long", 0) == 6666666666 + assert sp.long("wrong_long", 0) == 0 + assert sp.string("a_string", "ERROR!") == "A string" + assert sp.string("wrong_string", "ERROR!") == "ERROR!" + assert sp.long("another_int", 0) == 85 + assert sp.string("yet_another_string", "ERROR!") == "Another string" + assert sp.has("an_int") == true + assert sp.has("a_second_int") == false + + sp.clear + assert sp.all == null + + sp.destroy + end + fun do_java_stuff import native_activity in "Java" `{ // + Log (no context needed) android.util.Log.d("mnit_simple", "Java within NIT!!!"); @@ -61,3 +105,20 @@ redef class App }); `} end + +class Point + auto_serializable + super Serializable + + var x: Int + var y: Int + + init(x, y: Int) + do + self.x = x + self.y = y + end + + redef fun to_s do return "({x}, {y})" +end + diff --git a/examples/pnacl/converter/converter.nit b/examples/pnacl/converter/converter.nit index 4cbf103..907aaa3 100644 --- a/examples/pnacl/converter/converter.nit +++ b/examples/pnacl/converter/converter.nit @@ -18,7 +18,8 @@ # # First imports the pnacl module # Then redefines the 'handle_dictionary' method -# Finally creates a converter and initializes it +# Creates a converter and initializes it +# Finally checks for dictionaries import pnacl @@ -123,5 +124,6 @@ class Converter end end -var converter = new Converter -converter.initialize # Needed to correctly set up Nit control over the Pepper API +redef fun app do return once new Converter +app.initialize # Needed to correctly set up Nit control over the Pepper API +app.run # Launches an infinite loop in order to check for dictionaries diff --git a/examples/pnacl/converter/converter/js/pnacl_js.js b/examples/pnacl/converter/converter/js/pnacl_js.js index ee3a184..da29a31 100644 --- a/examples/pnacl/converter/converter/js/pnacl_js.js +++ b/examples/pnacl/converter/converter/js/pnacl_js.js @@ -30,7 +30,12 @@ function moduleDidLoad() { // (in C) or pp::Instance.PostMessage() (in C++). This implementation // displays the result in the JS console, puts the result in the '#rez' input and make it visible. function handleMessage(message_event) { - console.log(message_event.data.value.valueOf()); - $('#rez').val(message_event.data.value.valueOf().toFixed(2)); - $('#rez').css('visibility', 'visible'); + if (message_event.data.hasOwnProperty('exit')){ + console.log('Nit code exited with value: ' + message_event.data.exit + '.'); + } + else { + console.log(message_event.data.value.valueOf()); + $('#rez').val(message_event.data.value.valueOf().toFixed(2)); + $('#rez').css('visibility', 'visible'); + } } diff --git a/examples/shoot/src/shoot.nit b/examples/shoot/src/shoot.nit index ee41363..48cadaa 100644 --- a/examples/shoot/src/shoot.nit +++ b/examples/shoot/src/shoot.nit @@ -14,7 +14,10 @@ # Space shooter. # This program is a fun game but also a good example of the scene2d module -module shoot +module shoot is + app_name("Space Shooter") + app_version(0, 1, git_revision) +end import mnit import shoot_logic @@ -23,16 +26,16 @@ redef class Sprite # mnit specific method to draw a sprite # app is used to optain the assets and the display # Each sprite should implements this method - fun draw_on_display(app: ShootApp) do end + fun draw_on_display(app: App) do end # Helper function to draw an image centered on the current sprite position - fun draw_image(app: ShootApp, img: Image) + fun draw_image(app: App, img: Image) do app.display.blit_centered(img, (self.x.to_f/app.scale).to_i, (self.y.to_f/app.scale).to_i) end # Helper function to draw an image translated and rotated on the current sprite position - fun draw_rotated_image(app: ShootApp, img: Image, dx, dy: Int, angle: Float) + fun draw_rotated_image(app: App, img: Image, dx, dy: Int, angle: Float) do app.display.blit_rotated(img, self.x.to_f/app.scale, self.y.to_f/app.scale, angle) end @@ -166,8 +169,8 @@ redef class Star end redef class Scene - fun draw_on_display(app: ShootApp) do end - fun input(app: ShootApp, input_event: InputEvent): Bool do return false + fun draw_on_display(app: App) do end + fun input(app: App, input_event: InputEvent): Bool do return false end redef class PlayScene @@ -265,8 +268,7 @@ end ### -class ShootApp - super App +redef class App super View var debug: Bool = false @@ -283,8 +285,6 @@ class ShootApp end end - init do super - var scene: ShotScene var img_hitbox: Image @@ -321,6 +321,8 @@ class ShootApp scale = (800.0 * 600.0 / display.width.to_f / display.height.to_f).sqrt * 100.0 + debug = args.length > 0 and args.first == "--debug" + # TODO load assets here # ex: img = load_image( "img.png" ) # to get file located at assets/img.png before deployement @@ -378,9 +380,6 @@ class ShootApp if not self.scene.exists then quit = true end self.scene.draw_on_display(self) - - # Wait the next frame - sys.nanosleep(0, 16000000) end var paused: Bool = false @@ -410,6 +409,5 @@ if args.length > 0 and args.first == "--headless" then return end -var app = new ShootApp -app.debug = args.length > 0 and args.first == "--debug" +app.setup app.run diff --git a/lib/android/shared_preferences/shared_preferences.nit b/lib/android/shared_preferences/shared_preferences.nit new file mode 100644 index 0000000..382b364 --- /dev/null +++ b/lib/android/shared_preferences/shared_preferences.nit @@ -0,0 +1,24 @@ +# This file is part of NIT (http://www.nitlanguage.org). +# +# Copyright 2014 Frédéric Vachon +# +# 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 allowing to save and load datas to internal android device +# memory using `android.content.SharedPreferences` class. +# +# By default, the API 10 is imported. You can import API 11 to have +# access to this platform new features. +module shared_preferences + +import shared_preferences_api10 diff --git a/lib/android/shared_preferences/shared_preferences_api10.nit b/lib/android/shared_preferences/shared_preferences_api10.nit new file mode 100644 index 0000000..c78a09d --- /dev/null +++ b/lib/android/shared_preferences/shared_preferences_api10.nit @@ -0,0 +1,439 @@ +# This file is part of NIT (http://www.nitlanguage.org). +# +# Copyright 2014 Frédéric Vachon +# +# 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 to save/load data using `android.content.SharedPreferences` for the android platform +module shared_preferences_api10 + +import native_app_glue +import serialization +import json_serialization + +in "Java" `{ + import android.content.SharedPreferences; + import android.content.Context; + import android.app.Activity; + import java.util.Map; + import java.util.Iterator; + import java.lang.ClassCastException; + import java.lang.NullPointerException; +`} + +extern class NativeSharedPreferences in "Java" `{ android.content.SharedPreferences `} + super JavaObject + redef type SELF: NativeSharedPreferences + + fun contains(key: JavaString): Bool in "Java" `{ return recv.contains(key); `} + fun get_all: HashMap[JavaString, JavaObject] import HashMap[JavaString, JavaObject], + HashMap[JavaString, JavaObject].[]= in "Java" `{ + Map java_map = null; + int nit_hashmap = new_HashMap_of_JavaString_JavaObject(); + try { + java_map = recv.getAll(); + } catch (NullPointerException e) { + return nit_hashmap; + } + + for (Map.Entry entry: java_map.entrySet()) + HashMap_of_JavaString_JavaObject__index_assign(nit_hashmap, + entry.getKey(), entry.getValue()); + + return nit_hashmap; + `} + fun get_boolean(key: JavaString, def_value: Bool): Bool in "Java" `{ + boolean return_value; + try { + return_value = recv.getBoolean(key, def_value); + } catch (ClassCastException e) { + return def_value; + } + + return return_value; + `} + fun get_float(key: JavaString, def_value: Float): Float in "Java" `{ + float return_value; + try { + return_value = recv.getFloat(key, (float) def_value); + } catch (ClassCastException e) { + return def_value; + } + + return return_value; + `} + fun get_int(key: JavaString, def_value: Int): Int in "Java" `{ + int return_value; + try { + return_value = recv.getInt(key, def_value); + } catch (ClassCastException e) { + return def_value; + } + + return return_value; + `} + #FIXME: Get rid of the `int` cast when the ffi is fixed + fun get_long(key: JavaString, def_value: Int): Int in "Java" `{ + long return_value; + try { + return_value = recv.getLong(key, def_value); + } catch (ClassCastException e) { + return def_value; + } + + return (int) return_value; + `} + fun get_string(key: JavaString, def_value: JavaString): JavaString in "Java" `{ + String return_value = null; + try { + return_value = recv.getString(key, def_value); + } catch (ClassCastException e) { + return def_value; + } + + return return_value; + `} +end + +extern class NativeSharedPreferencesEditor in "Java" `{ android.content.SharedPreferences$Editor `} + super JavaObject + redef type SELF: NativeSharedPreferencesEditor + + fun clear: NativeSharedPreferencesEditor in "Java" `{ return recv.clear(); `} + fun commit: Bool in "Java" `{ return recv.commit(); `} + fun put_boolean(key: JavaString, value: Bool ): NativeSharedPreferencesEditor in "Java" `{ + return recv.putBoolean (key, value); + `} + fun put_float(key: JavaString, value: Float): NativeSharedPreferencesEditor in "Java" `{ + return recv.putFloat(key, (float) value); + `} + fun put_int(key: JavaString, value: Int): NativeSharedPreferencesEditor in "Java" `{ + return recv.putInt(key, value); + `} + fun put_long(key: JavaString, value: Int): NativeSharedPreferencesEditor in "Java" `{ + return recv.putLong(key, value); + `} + fun put_string(key: JavaString, value: JavaString): NativeSharedPreferencesEditor in "Java" `{ + return recv.putString(key, value); + `} + fun remove(key: JavaString): NativeSharedPreferencesEditor in "Java" `{ + return recv.remove(key); + `} +end + +# Provides services to save and load data for the android platform +class SharedPreferences + protected var context: NativeActivity + protected var shared_preferences: NativeSharedPreferences + protected var editor: NativeSharedPreferencesEditor + + # Automatically commits every saving/removing instructions (`true` by default) + var auto_commit = true + + protected init(app: App, file_name: String, mode: Int) + do + self.context = app.native_activity + sys.jni_env.push_local_frame(1) + setup(file_name.to_java_string, mode) + sys.jni_env.pop_local_frame + end + + # Restricts file access to the current application + init privately(app: App, file_name: String) + do + self.init(app, file_name, private_mode) + end + + # File access mode + private fun private_mode: Int in "Java" `{ return Context.MODE_PRIVATE; `} + + private fun set_vars(shared_pref: NativeSharedPreferences, editor: NativeSharedPreferencesEditor) + do + self.shared_preferences = shared_pref.new_global_ref + self.editor = editor.new_global_ref + end + + private fun setup(file_name: JavaString, mode: Int) import context, set_vars in "Java" `{ + Activity context = (Activity) SharedPreferences_context(recv); + SharedPreferences sp; + + // Uses default SharedPreferences if file_name is an empty String + if (file_name.equals("")) { + sp = context.getPreferences( mode); + } else { + sp = context.getSharedPreferences(file_name, mode); + } + + SharedPreferences.Editor editor = sp.edit(); + + SharedPreferences_set_vars(recv, sp, editor); + `} + + private fun commit_if_auto do if auto_commit then self.commit + + # Returns true if there's an entry corresponding the given key + fun has(key: String): Bool + do + sys.jni_env.push_local_frame(2) + var return_value = shared_preferences.contains(key.to_java_string) + sys.jni_env.pop_local_frame + return return_value + end + + # Returns a `HashMap` containing all entries or `null` if there's no entries + # + # User has to manage local stack deallocation himself + # + # Example : + # ~~~ + # var foo = new HashMap[JavaString, JavaObject] + # # ... + # for key, value in foo do + # key.delete_local_ref + # value.delete_local_ref + # end + # ~~~ + # *You should use Nit getters instead and get each value one by one* + fun all: nullable HashMap[JavaString, JavaObject] + do + var hashmap = shared_preferences.get_all + if hashmap.is_empty then return null + return hashmap + end + + # Returns the `Bool` value corresponding the given key or `def_value` if none + # or if the value isn't of correct type + fun bool(key: String, def_value: Bool): Bool + do + sys.jni_env.push_local_frame(2) + var return_value = shared_preferences.get_boolean(key.to_java_string, def_value) + sys.jni_env.pop_local_frame + return return_value + end + + # Returns the `Float` value corresponding the given key or `def_value` if none + # or if the value isn't of correct type + fun float(key: String, def_value: Float): Float + do + sys.jni_env.push_local_frame(2) + var return_value = shared_preferences.get_float(key.to_java_string, def_value) + sys.jni_env.pop_local_frame + return return_value + end + + # Returns the `Int` value corresponding the given key or `def_value` if none + # or if the value isn't of correct type + # Be aware of possible `def_value` integer overflow as the Nit `Int` corresponds + # to Java `long` + fun int(key: String, def_value: Int): Int + do + sys.jni_env.push_local_frame(2) + var return_value = shared_preferences.get_int(key.to_java_string, def_value) + sys.jni_env.pop_local_frame + return return_value + end + + # Returns the `Int` value corresponding the given key or `def_value` if none + # or if the value isn't of correct type + # Calls `getLong(key, value)` java method + # Nit `Int` is equivalent to Java `long` so that no integer overflow will occur + fun long(key: String, def_value: Int): Int + do + sys.jni_env.push_local_frame(2) + var return_value = shared_preferences.get_long(key.to_java_string, def_value) + sys.jni_env.pop_local_frame + return return_value + end + + # Returns the `String` value corresponding the given key or `def_value` if none + # or if the value isn't of correct type + fun string(key: String, def_value: String): String + do + sys.jni_env.push_local_frame(3) + var java_return_value = shared_preferences.get_string(key.to_java_string, + def_value.to_java_string) + var nit_return_value = java_return_value.to_s + sys.jni_env.pop_local_frame + return nit_return_value + end + + # Clears all the dictionnary entries in the specified file or the default file + # if none specified at instanciation + # Returns `self` allowing fluent programming + fun clear: SharedPreferences + do + editor.clear + commit_if_auto + return self + end + + # If auto_commit is `false`, has to be called to save the data to persistant memory + fun commit: Bool + do + sys.jni_env.push_local_frame(1) + var return_value = editor.commit + sys.jni_env.pop_local_frame + return return_value + end + + # Set a key-value pair using a `Bool` value + # Returns `self` allowing fluent programming + fun add_bool(key: String, value: Bool ): SharedPreferences + do + sys.jni_env.push_local_frame(1) + editor.put_boolean(key.to_java_string, value) + sys.jni_env.pop_local_frame + commit_if_auto + return self + end + + # Set a key-value pair using a `Float` value + # Returns `self` allowing fluent programming + # + # Be aware of possible loss of precision as Nit `Float` corresponds to Java `double` + # and the methods stores a Java `float` + fun add_float(key: String, value: Float): SharedPreferences + do + sys.jni_env.push_local_frame(1) + editor.put_float(key.to_java_string, value) + sys.jni_env.pop_local_frame + commit_if_auto + return self + end + + # Set a key-value pair using a `Int` type value + # Returns `self` allowing fluent programming + # + # Be aware of possible integer overflow as the Nit `Int` corresponds to Java `long` + # and the methods stores a Java `int` + # *You might want to use add_long instead* + fun add_int(key: String, value: Int): SharedPreferences + do + sys.jni_env.push_local_frame(1) + editor.put_int(key.to_java_string, value) + sys.jni_env.pop_local_frame + commit_if_auto + return self + end + + # Set a key-value pair using a `Int` type value + # Returns `self` allowing fluent programming + fun add_long(key: String, value: Int): SharedPreferences + do + sys.jni_env.push_local_frame(1) + editor.put_long(key.to_java_string, value) + sys.jni_env.pop_local_frame + commit_if_auto + return self + end + + # Set a key-value pair using a `String` type value + # Returns `self` allowing fluent programming + fun add_string(key: String, value: String): SharedPreferences + do + sys.jni_env.push_local_frame(2) + editor.put_string(key.to_java_string, value.to_java_string) + sys.jni_env.pop_local_frame + commit_if_auto + return self + end + + # Removes the corresponding entry in the file + # Returns `self` allowing fluent programming + fun remove(key: String): SharedPreferences + do + sys.jni_env.push_local_frame(1) + editor.remove(key.to_java_string) + sys.jni_env.pop_local_frame + commit_if_auto + return self + end + + # Deallocate global references allocated by the SharedPreferences instance + fun destroy + do + self.shared_preferences.delete_global_ref + self.editor.delete_global_ref + end + + # Save data to file dynamically calling the appropriate method according to value type + # Non-primitive Object (`String` excluded) will be stored as a serialized json `String` + # Nit `Int` are stored as Java `long`, therefore you'll have to retrieve it with `long` method + fun []=(key: String, value: Serializable) + do + value.add_to_preferences(self, key) + commit_if_auto + end + + # Retrieve an `Object` serialized via `[]=` function + # Returns `null` if there's no serialized object corresponding to the given key + # Make sure that the serialized object is `auto_serializable` or that it redefines + # the appropriate methods. Refer to `Serializable` documentation for further details + fun deserialize(key: String): nullable Object + do + var serialized_string = self.string(key, "") + + if serialized_string == "" then return null + + var deserializer = new JsonDeserializer(serialized_string) + return deserializer.deserialize + end +end + +redef class App + fun shared_preferences: SharedPreferences is cached do + return new SharedPreferences.privately(self, "") + end +end + +redef class Serializable + # Called by []= operator to dynamically call the appropriate add method + # Non-primitive Object (`String` excluded) will be stored as a serialized json `String` + # Refine your class to customize this method behaviour + protected fun add_to_preferences(shared_preferences: SharedPreferences, key: String) + do + var serialized_string = new StringOStream + var serializer = new JsonSerializer(serialized_string) + serializer.serialize(self) + + shared_preferences.add_string(key, serialized_string.to_s) + end +end + +redef class Bool + redef fun add_to_preferences(shared_preferences, key) + do + shared_preferences.add_bool(key, self) + end +end + +redef class Int + redef fun add_to_preferences(shared_preferences, key) + do + shared_preferences.add_long(key, self) + end +end + +redef class Float + redef fun add_to_preferences(shared_preferences, key) + do + shared_preferences.add_float(key, self) + end +end + +redef class String + redef fun add_to_preferences(shared_preferences, key) + do + shared_preferences.add_string(key, self) + end +end diff --git a/lib/android/shared_preferences/shared_preferences_api11.nit b/lib/android/shared_preferences/shared_preferences_api11.nit new file mode 100644 index 0000000..4a87478 --- /dev/null +++ b/lib/android/shared_preferences/shared_preferences_api11.nit @@ -0,0 +1,105 @@ +# This file is part of NIT (http://www.nitlanguage.org). +# +# Copyright 2014 Frédéric Vachon +# +# 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. + +# Refines shared_preferences module to add API 11 services +module shared_preferences_api11 + +import shared_preferences + +in "Java" `{ + import java.util.HashSet; + import java.util.Set; +`} + +redef extern class NativeSharedPreferences + + # Default value to null instead of Set + fun get_string_set(key: JavaString): HashSet[JavaString] import HashSet[JavaString], + HashSet[JavaString].add in "Java" `{ + Set def_value = new HashSet(); + Set java_set = recv.getStringSet(key, def_value); + int nit_hashset = new_HashSet_of_JavaString(); + + for (String element: java_set) + HashSet_of_JavaString_add(nit_hashset, element); + + return nit_hashset; + `} +end + +redef extern class NativeSharedPreferencesEditor + + fun put_string_set(key: JavaString, value: HashSet[JavaString]): NativeSharedPreferencesEditor + import HashSet[JavaString], HashSet[JavaString].iterator, Iterator[JavaString].is_ok, + Iterator[JavaString].item, Iterator[JavaString].next in "Java" `{ + Set java_set = new HashSet(); + int itr = HashSet_of_JavaString_iterator(value); + + while (Iterator_of_JavaString_is_ok(itr)) { + java_set.add(Iterator_of_JavaString_item(itr)); + Iterator_of_JavaString_next(itr); + } + + return recv.putStringSet(key, java_set); + `} +end + +redef class SharedPreferences + + # Allows multiple processes to write into the same `SharedPreferences` file + init multi_process(app: App, file_name: String) + do + self.init(app, file_name, multi_process_mode) + end + + # File access mode + private fun multi_process_mode: Int in "Java" `{ return Content.MODE_MULTI_PROCESS; `} + + # Returns the `HashSet[JavaString]` value corresponding the given key or `null` if none + # + # User has to manage local stack deallocation himself + # + # Example : + # ~~~ + # var a_hash_set = shared_preferences.string_set("A key") + # ... + # for element in a_hash_set do element.delete_local_ref + # ~~~ + fun string_set(key: String): HashSet[JavaString] + do + sys.jni_env.push_local_frame(3) + var return_value = shared_preferences.get_string_set(key.to_java_string) + sys.jni_env.pop_local_frame + return return_value + end + + # Set a key-value pair using a `HashSet[JavaString]` value + # Returns self allowing fluent programming + # + # User has to manage local stack deallocation himself + # + # Example : + # ~~~ + # var foo = new HashSet[JavaString] + # shared_preferences.add_string_set("A key", foo) + # for element in foo do element.delete_local_ref + # ~~~ + fun add_string_set(key: String, value: HashSet[JavaString]): SharedPreferences + do + editor.put_string_set(key.to_java_string, value) + return self + end +end diff --git a/lib/app.nit b/lib/app.nit index 3e2d737..7ee9493 100644 --- a/lib/app.nit +++ b/lib/app.nit @@ -29,7 +29,7 @@ class App # Starts the internal setup of graphical and other stuff # Is called just before run - protected fun setup do end + fun setup do end # Main entry point of your application fun run do end diff --git a/lib/emscripten.nit b/lib/emscripten.nit new file mode 100644 index 0000000..7fc5e76 --- /dev/null +++ b/lib/emscripten.nit @@ -0,0 +1,30 @@ +# 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. + +module emscripten is platform + +`{ + #include +`} + +redef class String + fun run_js do run_js_native(self.escape_to_js.to_cstring) + private fun run_js_native(script: NativeString) `{ emscripten_run_script(script); `} + + fun escape_to_js: String do return self.replace('\n', "\\n") + + fun alert do "alert('{self.escape_to_js}')".run_js +end diff --git a/lib/mnit/mnit.nit b/lib/mnit/mnit.nit index 3e313d4..53c4681 100644 --- a/lib/mnit/mnit.nit +++ b/lib/mnit/mnit.nit @@ -21,3 +21,4 @@ import mnit_app import opengles1 import assets import numbers +import mnit_fps diff --git a/lib/mnit/mnit_fps.nit b/lib/mnit/mnit_fps.nit new file mode 100644 index 0000000..cd30e83 --- /dev/null +++ b/lib/mnit/mnit_fps.nit @@ -0,0 +1,75 @@ +# 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. + +# Frame-rate control for applications +module mnit_fps + +import mnit_app +private import realtime + +redef class App + # Limit the frame-rate to a given frequency + # This basically limits how much `frame_core` is called per second. + # Zero (or a negative value) means no limit. + # + # Applications can modify this value even during the main-loop. + var maximum_fps writable = 60 + + # Current frame-rate + # Updated each 5 seconds. + var current_fps = 0.0 + + redef fun full_frame + do + super + limit_fps + end + + # The clock for limit_fps + private var clock = new Clock + + # Number of frames since the last deadline + # Used tocompute `current_fps`. + private var frame_count = 0 + + # Deadline used to compute `current_fps` + private var frame_count_deadline = 0 + + # Check and sleep to maitain a frame-rate bellow `maximum_fps` + # Also periodically uptate `current_fps` + # Is automatically called at the end of `full_frame`. + fun limit_fps + do + var t = clock.total.sec + if t >= frame_count_deadline then + var cfps = frame_count_deadline.to_f / 5.0 + self.current_fps = cfps + frame_count = 0 + frame_count_deadline = t + 5 + end + frame_count += 1 + + var mfps = maximum_fps + if mfps <= 0 then return + var dt = clock.lapse + var target_dt = 1000000000 / mfps + var sec = dt.sec + var nanosec = dt.nanosec + if sec == 0 and nanosec < target_dt then + var sleep_t = target_dt - nanosec + sys.nanosleep(0, sleep_t) + dt = clock.lapse + end + end +end diff --git a/lib/mnit_android/android_app.nit b/lib/mnit_android/android_app.nit index c25e56a..3819c25 100644 --- a/lib/mnit_android/android_app.nit +++ b/lib/mnit_android/android_app.nit @@ -159,7 +159,7 @@ class AndroidPointerEvent redef fun y: Float do return extern_y(motion_event.inner_event, pointer_id) private fun extern_y(motion_event: InnerAndroidMotionEvent, pointer_id: Int): Float is extern `{ - return ((int) AMotionEvent_getY(motion_event, pointer_id) * mnit_zoom) + 32; + return ((int) AMotionEvent_getY(motion_event, pointer_id) * mnit_zoom); `} fun pressure: Float do return extern_pressure(motion_event.inner_event, pointer_id) diff --git a/lib/perfect_hashing.nit b/lib/perfect_hashing.nit index 9ac59f3..a4b8417 100644 --- a/lib/perfect_hashing.nit +++ b/lib/perfect_hashing.nit @@ -35,7 +35,7 @@ class Perfecthashing do # By default, all identifiers are available interval = new List[Couple[nullable Int, nullable Int]] - interval.push(new Couple[nullable Int, nullable Int](0, null)) + interval.push(new Couple[nullable Int, nullable Int](1, null)) tempht = new Array[nullable Int] end diff --git a/lib/pnacl.nit b/lib/pnacl.nit index ef149b1..fde40f3 100644 --- a/lib/pnacl.nit +++ b/lib/pnacl.nit @@ -21,13 +21,15 @@ # If NACL_SDK_ROOT is not set in your PATH, you have to work in # 'nacl_sdk/pepper_your_pepper_version/getting_started/your_project_folder'. # -# Provides PNaCl support for Nit +# Provides PNaCl support for Nit. module pnacl is platform `{ #include #include + #include #include #include + #include #include "ppapi/c/pp_errors.h" #include "ppapi/c/ppp.h" #include "ppapi/c/ppp_instance.h" @@ -38,8 +40,49 @@ module pnacl is platform #include "ppapi/c/ppb_var_dictionary.h" #include "ppapi/c/ppb_var_array.h" + #define MAX_DICTIONARY_QUEUE_SIZE 200 + #define MAX_MESSAGE_QUEUE_SIZE 10 + extern int nit_main(int, char**); + /* A working thread for Nit. */ + static pthread_t g_nit_thread; + + /* Mutex that guards the queues. */ + static pthread_mutex_t g_dictionary_queue_mutex; + static pthread_mutex_t g_message_queue_mutex; + + /* Condition variables that are signalled when the queues are not empty. */ + static pthread_cond_t g_dictionary_queue_not_empty_cond; + static pthread_cond_t g_message_queue_not_empty_cond; + + /** Circular queues of dictionaries and messages from JavaScript to be handled. + * + * If g_queue_start < g_queue_end: + * all elements in the range [g_queue_start, g_queue_end) are valid. + * If g_queue_start > g_queue_end: + * all elements in the ranges [0, g_queue_end) and + * [g_queue_start, MAX_QUEUE_SIZE) are valid. + * If g_queue_start == g_queue_end, and g_queue_size > 0: + * all elements in the g_queue are valid. + * If g_queue_start == g_queue_end, and g_queue_size == 0: + * No elements are valid. */ + static struct PP_Var g_dictionary_queue[MAX_DICTIONARY_QUEUE_SIZE]; + static char* g_message_queue[MAX_MESSAGE_QUEUE_SIZE]; + + /* The index of the head of the queues. */ + static int g_dictionary_queue_start = 0; + static int g_message_queue_start = 0; + + /* The index of the tail of the queues, non-inclusive. */ + static int g_dictionary_queue_end = 0; + static int g_message_queue_end = 0; + + /* The size of the queues. */ + static int g_dictionary_queue_size = 0; + static int g_message_queue_size = 0; + + /* PNaCl interfaces. */ const PPB_Messaging* g_varMessagingInterface; const PPB_Var* g_varInterface; const PPB_VarDictionary* g_varDictionaryInterface; @@ -48,6 +91,140 @@ module pnacl is platform PP_Instance g_instance; PnaclApp app; + /* A wrapper to launch the Nit main on a new thread. */ + void* WrapperNitMain(void* arg) { + nit_main(0, NULL); + return NULL; + } + + /** Return whether the queues are empty. + * + * NOTE: this function assumes g_queue_mutex lock is held. + * @return non-zero if the queue is empty. */ + static int IsDictionaryQueueEmpty() { return g_dictionary_queue_size == 0; } + static int IsMessageQueueEmpty() { return g_message_queue_size == 0; } + + /** Return whether the queues are full. + * + * NOTE: this function assumes g_queue_mutex lock is held. + * @return non-zero if the queue is full. */ + static int IsDictionaryQueueFull() { return g_dictionary_queue_size == MAX_DICTIONARY_QUEUE_SIZE; } + static int IsMessageQueueFull() { return g_message_queue_size == MAX_MESSAGE_QUEUE_SIZE; } + + /* Initialize the queues. */ + void InitializeQueues() { + pthread_mutex_init(&g_dictionary_queue_mutex, NULL); + pthread_cond_init(&g_dictionary_queue_not_empty_cond, NULL); + pthread_mutex_init(&g_message_queue_mutex, NULL); + pthread_cond_init(&g_message_queue_not_empty_cond, NULL); + } + + /** Enqueue a dictionary (i.e. add to the end) + * + * If the queue is full, the dictionary will be dropped. + * + * NOTE: this function assumes g_dictionary_queue_mutex is _NOT_ held. + * @param[in] dictionary, the dictionary to enqueue. + * @return non-zero if the dictionary was added to the queue. */ + int EnqueueDictionary(struct PP_Var dictionary) { + pthread_mutex_lock(&g_dictionary_queue_mutex); + + /* We shouldn't block the main thread waiting for the queue to not be full, + * so just drop the dictionary. */ + if (IsDictionaryQueueFull()) { + pthread_mutex_unlock(&g_dictionary_queue_mutex); + return 0; + } + + g_dictionary_queue[g_dictionary_queue_end] = dictionary; + g_dictionary_queue_end = (g_dictionary_queue_end + 1) % MAX_DICTIONARY_QUEUE_SIZE; + g_dictionary_queue_size++; + + pthread_cond_signal(&g_dictionary_queue_not_empty_cond); + + pthread_mutex_unlock(&g_dictionary_queue_mutex); + + return 1; + } + + /** Enqueue a message (i.e. add to the end) + * + * If the queue is full, the message will be dropped. + * + * NOTE: this function assumes g_message_queue_mutex is _NOT_ held. + * @param[in] message The message to enqueue. + * @return non-zero if the message was added to the queue. */ + int EnqueueMessage(char* message) { + pthread_mutex_lock(&g_message_queue_mutex); + + /* We shouldn't block the main thread waiting for the queue to not be full, + * so just drop the message. */ + if (IsMessageQueueFull()) { + pthread_mutex_unlock(&g_message_queue_mutex); + return 0; + } + + g_message_queue[g_message_queue_end] = message; + g_message_queue_end = (g_message_queue_end + 1) % MAX_MESSAGE_QUEUE_SIZE; + g_message_queue_size++; + + pthread_cond_signal(&g_message_queue_not_empty_cond); + + pthread_mutex_unlock(&g_message_queue_mutex); + + return 1; + } + + /** Dequeue a dictionary and return it. + * + * This function blocks until a dictionary is available. It should not be called + * on the main thread. + * + * NOTE: this function assumes g_dictionary_queue_mutex is _NOT_ held. + * @return The dictionary at the head of the queue. */ + struct PP_Var DequeueDictionary() { + struct PP_Var dictionary = g_varDictionaryInterface->Create(); + + pthread_mutex_lock(&g_dictionary_queue_mutex); + + while (IsDictionaryQueueEmpty()) { + pthread_cond_wait(&g_dictionary_queue_not_empty_cond, &g_dictionary_queue_mutex); + } + + dictionary = g_dictionary_queue[g_dictionary_queue_start]; + g_dictionary_queue_start = (g_dictionary_queue_start + 1) % MAX_DICTIONARY_QUEUE_SIZE; + g_dictionary_queue_size--; + + pthread_mutex_unlock(&g_dictionary_queue_mutex); + + return dictionary; + } + + /** Dequeue a message and return it. + * + * This function blocks until a message is available. It should not be called + * on the main thread. + * + * NOTE: this function assumes g_queue_mutex is _NOT_ held. + * @return The message at the head of the queue. */ + char* DequeueMessage() { + char* message = NULL; + + pthread_mutex_lock(&g_message_queue_mutex); + + while (IsMessageQueueEmpty()) { + pthread_cond_wait(&g_message_queue_not_empty_cond, &g_message_queue_mutex); + } + + message = g_message_queue[g_message_queue_start]; + g_message_queue_start = (g_message_queue_start + 1) % MAX_MESSAGE_QUEUE_SIZE; + g_message_queue_size--; + + pthread_mutex_unlock(&g_message_queue_mutex); + + return message; + } + /* Posts a string message to JS. */ void PostMessage(char* message) { /* Create PP_Var containing the message body. */ @@ -69,9 +246,21 @@ module pnacl is platform g_varMessagingInterface->PostMessage(g_instance, v); } + /* char* to PP_Var. */ + static struct PP_Var CStrToVar(const char* str) { + if (g_varInterface != NULL) { + return g_varInterface->VarFromUtf8(str, strlen(str)); + } + return PP_MakeUndefined(); + } + static PP_Bool Instance_DidCreate(PP_Instance instance, uint32_t argc, const char* argn[], const char* argv[]) { g_instance = instance; - nit_main(0, NULL); + + /* Initialization of the queues and creation of the thread for Nit. */ + InitializeQueues(); + pthread_create(&g_nit_thread, NULL, &WrapperNitMain, NULL); + return PP_TRUE; } @@ -92,24 +281,22 @@ module pnacl is platform return PP_FALSE; } - /* char* to PP_Var. */ - static struct PP_Var CStrToVar(const char* str) { - if (g_varInterface != NULL) { - return g_varInterface->VarFromUtf8(str, strlen(str)); - } - return PP_MakeUndefined(); - } - /* Called when JS sends something, is set to accept Strings or Dictionaries, returns an error if received object is not a String or Dictionary. */ void Messaging_HandleMessage(PP_Instance instance, struct PP_Var varMessage) { if(varMessage.type == PP_VARTYPE_DICTIONARY) { - PnaclApp_handle_dictionary(app, &varMessage); + if(!EnqueueDictionary(varMessage)) { + struct PP_Var errorMessage = CStrToVar("QueueFull : dropped dictionary because the queue was full."); + g_varMessagingInterface->PostMessage(g_instance, errorMessage); + } } else if(varMessage.type == PP_VARTYPE_STRING) { uint32_t len; char* message = (char*)g_varInterface->VarToUtf8(varMessage, &len); - PnaclApp_handle_message(app, NativeString_to_s_with_length(message, len)); + if(!EnqueueMessage(message)) { + struct PP_Var errorMessage = CStrToVar("QueueFull : dropped message because the queue was full."); + g_varMessagingInterface->PostMessage(g_instance, errorMessage); + } } else { struct PP_Var errorMessage = CStrToVar("TypeError : only accepts JS objects or Strings"); @@ -117,9 +304,22 @@ module pnacl is platform } } + /* This function is called by Nit when using check_dictionary, + returns the dictionary at the head of the queue. */ + void* NitHandleDictionary() { + struct PP_Var dictionary = DequeueDictionary(); + PnaclApp_handle_dictionary(app, &dictionary); + return 0; + } + + /* This function is called By Nit when waiting for a user input. */ + char* NitHandleMessage() { + return DequeueMessage(); + } + /* Entry point */ PP_EXPORT int32_t PPP_InitializeModule(PP_Module module_id, PPB_GetInterface get_browser_interface) { - /* Initializing global pointers */ + /* Initializing global pointers. */ g_varMessagingInterface = (const PPB_Messaging*) get_browser_interface(PPB_MESSAGING_INTERFACE); g_varInterface = (const PPB_Var*) get_browser_interface(PPB_VAR_INTERFACE); g_varDictionaryInterface = (const PPB_VarDictionary*) get_browser_interface(PPB_VAR_DICTIONARY_INTERFACE); @@ -152,7 +352,7 @@ module pnacl is platform return NULL; } - // Hack poll + /* Hack in order to avoid the problem with file. */ int poll(void *fds, int nfds, int timeout) { return 0; } `} @@ -422,6 +622,51 @@ redef class String `} end +# A stream for PNaCl, redefines basic input and output methods. +class PnaclStream + super PollableIStream + super OStream + super BufferedIStream + + init do prepare_buffer(10) + + redef var end_reached: Bool = false + + redef fun eof do return end_reached + + # Redefintion of 'write' to send messages to the browser. + redef fun write(s: Text) do app.post_message s.to_s + + redef fun is_writable: Bool do return true + + # Checks if there is a message in the queue, and if so the message is handled automatically. + fun check_message: NativeString `{ + return NitHandleMessage(); + `} + + # fill_buffer now checks for a message in the message queue which is filled by user inputs. + redef fun fill_buffer + do + _buffer.clear + _buffer_pos = 0 + _buffer.append check_message.to_s + end +end + +# For a PNaCl app, Sys uses PnaclStreams. +redef class Sys + fun pnacl_stdstr: PnaclStream do return once new PnaclStream + + # NaCl input. + redef fun stdin do return pnacl_stdstr + + # NaCl output. + redef fun stdout do return pnacl_stdstr + + # NaCl output for errors. + redef fun stderr do return pnacl_stdstr +end + # Class that provides the tools to interact with PNaCl. class PnaclApp @@ -464,4 +709,35 @@ class PnaclApp do # To be Implemented by user. end + + # Checks if there is a dictionary in the queue, and if so the dictionary is handled automatically. + fun check_dictionary `{ + NitHandleDictionary(); + `} + + # Infinite loop on check_dictionary + fun run + do + loop + check_dictionary + end + end end + +redef interface Object + # Calls 'pthread_exit on current thread + fun exit_thread(exit_value: Int) `{ + pthread_exit((void*) exit_value); + `} + + # Redef of exit in order to avoid the module to crash by terminating only the Nit thread. + redef fun exit(exit_value: Int) + do + var dictionary = new PepperDictionary + dictionary["exit"] = exit_value + app.post_dictionary dictionary + exit_thread exit_value + end +end + +fun app: PnaclApp do return once new PnaclApp diff --git a/lib/standard/stream.nit b/lib/standard/stream.nit index 504396a..79e601f 100644 --- a/lib/standard/stream.nit +++ b/lib/standard/stream.nit @@ -20,6 +20,7 @@ in "C" `{ #include #include #include + #include `} # Abstract stream class diff --git a/src/abstract_compiler.nit b/src/abstract_compiler.nit index d3ca7d8..99b84be 100644 --- a/src/abstract_compiler.nit +++ b/src/abstract_compiler.nit @@ -202,8 +202,12 @@ class MakefileToolchain do if self.toolcontext.opt_stacktrace.value == "nitstack" then compiler.build_c_to_nit_bindings + var platform = compiler.mainmodule.target_platform + var cc_opt_with_libgc = "-DWITH_LIBGC" + if platform != null and not platform.supports_libgc then cc_opt_with_libgc = "" + # Add gc_choser.h to aditionnal bodies - var gc_chooser = new ExternCFile("gc_chooser.c", "-DWITH_LIBGC") + var gc_chooser = new ExternCFile("gc_chooser.c", cc_opt_with_libgc) compiler.extern_bodies.add(gc_chooser) compiler.files_to_copy.add "{cc_paths.first}/gc_chooser.c" compiler.files_to_copy.add "{cc_paths.first}/gc_chooser.h" @@ -288,18 +292,19 @@ class MakefileToolchain self.toolcontext.info("Total C source files to compile: {cfiles.length}", 2) end + fun makefile_name(mainmodule: MModule): String do return "{mainmodule.name}.mk" + + fun default_outname(mainmodule: MModule): String do return mainmodule.name + fun write_makefile(compiler: AbstractCompiler, compile_dir: String, cfiles: Array[String]) do var mainmodule = compiler.mainmodule - var outname = self.toolcontext.opt_output.value - if outname == null then - outname = "{mainmodule.name}" - end + var outname = self.toolcontext.opt_output.value or else default_outname(mainmodule) var orig_dir=".." # FIXME only works if `compile_dir` is a subdirectory of cwd var outpath = orig_dir.join_path(outname).simplify_path - var makename = "{mainmodule.name}.mk" + var makename = makefile_name(mainmodule) var makepath = "{compile_dir}/{makename}" var makefile = new OFStream.open(makepath) @@ -367,7 +372,7 @@ class MakefileToolchain fun compile_c_code(compiler: AbstractCompiler, compile_dir: String) do - var makename = "{compiler.mainmodule.name}.mk" # FIXME duplicated from write_makefile + var makename = makefile_name(compiler.mainmodule) var makeflags = self.toolcontext.opt_make_flags.value if makeflags == null then makeflags = "" diff --git a/src/common_ffi/common_ffi.nit b/src/common_ffi/common_ffi.nit index 6fcef86..c22180c 100644 --- a/src/common_ffi/common_ffi.nit +++ b/src/common_ffi/common_ffi.nit @@ -32,6 +32,7 @@ import c_compiler_options import c import cpp import java +import extra_java_files redef class MModule # Does this module uses the FFI? diff --git a/src/common_ffi/extra_java_files.nit b/src/common_ffi/extra_java_files.nit new file mode 100644 index 0000000..632a322 --- /dev/null +++ b/src/common_ffi/extra_java_files.nit @@ -0,0 +1,110 @@ +# 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. + +# Intro the annotation `extra_java_files` to compile extra java files +# +# It is mainly used to declare public Java classes. +module extra_java_files + +import literal +import java + +redef class ToolContext + var extra_java_files_phase: Phase = new JavaExtraFilesPhase(self, [literal_phase]) +end + +redef class MModule + # Extra Java files to compile with the project + private var extra_java_files: nullable Array[JavaFile] = null +end + +private class JavaExtraFilesPhase + super Phase + + redef fun process_annotated_node(nmoduledecl, nat) + do + # Skip if we are not interested + var annot_name = "extra_java_files" + if nat.n_atid.n_id.text != annot_name then return + + # Do some validity checks and print errors if the annotation is used incorrectly + var modelbuilder = toolcontext.modelbuilder + + if not nmoduledecl isa AModuledecl then + modelbuilder.error(nat, "Syntax error: only the declaration of modules may use \"{annot_name}\".") + return + end + + var args = nat.n_args + if args.is_empty then + modelbuilder.error(nat, "Syntax error: \"{annot_name}\" expects at least one argument.") + return + end + + # retrieve module + var nmodule = nmoduledecl.parent.as(AModule) + var mmodule = nmodule.mmodule.as(not null) + var java_files = mmodule.extra_java_files + if java_files == null then + java_files = new Array[JavaFile] + mmodule.extra_java_files = java_files + end + + var format_error = "Syntax error: \"{annot_name}\" expects its arguments to be paths to java files." + for arg in args do + if not arg isa AExprAtArg then + modelbuilder.error(nat, format_error) + return + end + + var expr = arg.n_expr + if not expr isa AStringFormExpr then + modelbuilder.error(nat, format_error) + return + end + + var path = expr.value + assert path != null + + # Append specified path to directory of the Nit source file + var source_file = nat.location.file + if source_file != null then path = "{source_file.filename.dirname}/{path}" + + if not path.file_exists then + modelbuilder.error(nat, "FFI with Java error: file \"{path}\" not found.") + continue + end + + var file = new JavaFile(path) + mmodule.ffi_files.add file + java_files.add file + end + end +end + +redef class JavaLanguage + redef fun compile_to_files(mmodule, compdir) + do + super + + # also copy over the java files + var extra_java_files = mmodule.extra_java_files + if extra_java_files != null then for file in extra_java_files do + var path = file.filename + path.file_copy_to("{compdir}/{path.basename("")}") + end + end +end diff --git a/src/common_ffi/java.nit b/src/common_ffi/java.nit index 330336f..f6e44f7 100644 --- a/src/common_ffi/java.nit +++ b/src/common_ffi/java.nit @@ -290,8 +290,10 @@ redef class AExternPropdef var sys_class = modelbuilder.try_get_mclass_by_name(self, mmodule, "Sys") assert sys_class != null var sys_jni_env_meth = modelbuilder.try_get_mproperty_by_name2(self, mmodule, sys_class.mclass_type, "jni_env") - assert sys_jni_env_meth != null - assert sys_jni_env_meth isa MMethod + if sys_jni_env_meth == null or not sys_jni_env_meth isa MMethod then + toolcontext.error(self.location, "Java FFI error: you must import the `java` module when using the FFI with Java") + return + end explicit_call = new MExplicitCall(sys_class.mclass_type, sys_jni_env_meth, mmodule) fcc.callbacks.add(explicit_call) @@ -349,7 +351,7 @@ class JavaFile super ExternFile redef fun makefile_rule_name do return "{filename.basename(".java")}.class" - redef fun makefile_rule_content do return "javac {filename} -d ." + redef fun makefile_rule_content do return "javac {filename.basename("")} -d ." redef fun add_to_jar do return true end @@ -463,7 +465,7 @@ redef class MClassType do var ftype = mclass.ftype if ftype isa ForeignJavaType then return ftype.java_type. - replace('/', ".").replace('$', ".").replace(' ', "") + replace('/', ".").replace('$', ".").replace(' ', "").replace('\n',"") if mclass.name == "Bool" then return "boolean" if mclass.name == "Char" then return "char" if mclass.name == "Int" then return "int" @@ -485,7 +487,7 @@ redef class MClassType redef fun jni_format do var ftype = mclass.ftype - if ftype isa ForeignJavaType then return "L{ftype.java_type.replace('.', "/").replace(' ', "")};" + if ftype isa ForeignJavaType then return "L{ftype.java_type.replace('.', "/").replace(' ', "").replace('\n', "")};" if mclass.name == "Bool" then return "Z" if mclass.name == "Char" then return "C" if mclass.name == "Int" then return "I" diff --git a/src/emscripten_platform.nit b/src/emscripten_platform.nit new file mode 100644 index 0000000..4c53b36 --- /dev/null +++ b/src/emscripten_platform.nit @@ -0,0 +1,56 @@ +# 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. + +# Compile to JavaScript using the Emscripten SDK +module emscripten_platform + +import platform +import abstract_compiler + +redef class ToolContext + redef fun platform_from_name(name) + do + if name == "emscripten" then return new EmscriptenPlatform + return super + end +end + +class EmscriptenPlatform + super Platform + + redef fun supports_libunwind do return false + redef fun supports_libgc do return false + redef fun toolchain(toolcontext) do return new EnscriptenToolchain(toolcontext) +end + +class EnscriptenToolchain + super MakefileToolchain + + redef fun makefile_name(mainmodule) do return "{mainmodule.name}.js.mk" + + redef fun default_outname(mainmodule) do return "{super}.js" + + redef fun write_makefile(compiler, compile_dir, cfiles) + do + super + + var emcc_make_flags = "CC=emcc CFLAGS='-g -Wno-unused-value -Wno-switch -Qunused-arguments'" + + var make_flags = self.toolcontext.opt_make_flags.value or else "" + make_flags += emcc_make_flags + self.toolcontext.opt_make_flags.value = make_flags + end +end diff --git a/src/modelbuilder.nit b/src/modelbuilder.nit index 85f9443..3dbd389 100644 --- a/src/modelbuilder.nit +++ b/src/modelbuilder.nit @@ -474,10 +474,12 @@ class ModelBuilder var pn = rdp.basename(".nit") var mp = dirpath.join_path(pn + ".nit").simplify_path + var dirpath2 = dirpath if not mp.file_exists then if pn == "src" then # With a src directory, the group name is the name of the parent directory - pn = rdp.dirname.basename("") + dirpath2 = rdp.dirname + pn = dirpath2.basename("") else return null end @@ -498,7 +500,8 @@ class ModelBuilder mgroup = new MGroup(pn, parent.mproject, parent) toolcontext.info("found sub group `{mgroup.full_name}` at {dirpath}", 2) end - var readme = dirpath.join_path("README") + var readme = dirpath2.join_path("README.md") + if not readme.file_exists then readme = dirpath2.join_path("README") if readme.file_exists then var mdoc = new MDoc var s = new IFStream.open(readme) diff --git a/src/modelize_class.nit b/src/modelize_class.nit index 4cd9475..09b7081 100644 --- a/src/modelize_class.nit +++ b/src/modelize_class.nit @@ -97,7 +97,12 @@ redef class ModelBuilder error(nvisibility, "Error: refinement changed the visibility from a {mclass.visibility} to a {mvisibility}") end nclassdef.mclass = mclass - nmodule.mclass2nclassdef[mclass] = nclassdef + if not nmodule.mclass2nclassdef.has_key(mclass) then + nmodule.mclass2nclassdef[mclass] = nclassdef + nclassdef.all_defs = [nclassdef] + else + nmodule.mclass2nclassdef[mclass].all_defs.add(nclassdef) + end end # Visit the AST and create the `MClassDef` objects @@ -107,7 +112,14 @@ redef class ModelBuilder var objectclass = try_get_mclass_by_name(nmodule, mmodule, "Object") var mclass = nclassdef.mclass if mclass == null then return # Skip error - #var mclassdef = nclassdef.mclassdef.as(not null) + + # In case of non-standard AClassdef, try to attach to an already existing mclassdef + var other_nclassdef = nmodule.mclass2nclassdef[mclass] + if other_nclassdef != nclassdef then + assert not nclassdef isa AStdClassdef + nclassdef.mclassdef = other_nclassdef.mclassdef + return + end var names = new Array[String] var bounds = new Array[MType] @@ -281,8 +293,7 @@ redef class ModelBuilder if errcount != toolcontext.error_count then return # Create the mclassdef hierarchy - for nclassdef in nmodule.n_classdefs do - var mclassdef = nclassdef.mclassdef.as(not null) + for mclassdef in mmodule.mclassdefs do mclassdef.add_in_hierarchy end @@ -505,6 +516,8 @@ redef class AClassdef var mclass: nullable MClass # The associated MClassDef once build by a `ModelBuilder` var mclassdef: nullable MClassDef + # All (self and other) definitions for the same mclassdef + var all_defs: nullable Array[AClassdef] end redef class AClasskind diff --git a/src/modelize_property.nit b/src/modelize_property.nit index e24541e..3563862 100644 --- a/src/modelize_property.nit +++ b/src/modelize_property.nit @@ -28,6 +28,7 @@ private class ModelizePropertyPhase redef fun process_nmodule(nmodule) do for nclassdef in nmodule.n_classdefs do + if nclassdef.all_defs == null then continue # skip non principal classdef toolcontext.modelbuilder.build_properties(nclassdef) end end @@ -52,14 +53,16 @@ redef class ModelBuilder build_properties(mclassdef2nclassdef[superclassdef]) end - for npropdef in nclassdef.n_propdefs do - npropdef.build_property(self, nclassdef) - end - for npropdef in nclassdef.n_propdefs do - npropdef.build_signature(self) - end - for npropdef in nclassdef.n_propdefs do - npropdef.check_signature(self) + for nclassdef2 in nclassdef.all_defs do + for npropdef in nclassdef2.n_propdefs do + npropdef.build_property(self, mclassdef) + end + for npropdef in nclassdef2.n_propdefs do + npropdef.build_signature(self) + end + for npropdef in nclassdef2.n_propdefs do + npropdef.check_signature(self) + end end process_default_constructors(nclassdef) end @@ -225,7 +228,9 @@ redef class AClassdef # The free init (implicitely constructed by the class if required) var mfree_init: nullable MMethodDef = null +end +redef class MClassDef # What is the `APropdef` associated to a `MProperty`? # Used to check multiple definition of a property. var mprop2npropdef: Map[MProperty, APropdef] = new HashMap[MProperty, APropdef] @@ -260,7 +265,7 @@ redef class APropdef # The associated propdef once build by a `ModelBuilder` var mpropdef: nullable MPROPDEF writable - private fun build_property(modelbuilder: ModelBuilder, nclassdef: AClassdef) is abstract + private fun build_property(modelbuilder: ModelBuilder, mclassdef: MClassDef) is abstract private fun build_signature(modelbuilder: ModelBuilder) is abstract private fun check_signature(modelbuilder: ModelBuilder) is abstract private fun new_property_visibility(modelbuilder: ModelBuilder, mclassdef: MClassDef, nvisibility: nullable AVisibility): MVisibility @@ -306,13 +311,13 @@ redef class APropdef end end - private fun check_redef_keyword(modelbuilder: ModelBuilder, nclassdef: AClassdef, kwredef: nullable Token, need_redef: Bool, mprop: MProperty): Bool + private fun check_redef_keyword(modelbuilder: ModelBuilder, mclassdef: MClassDef, kwredef: nullable Token, need_redef: Bool, mprop: MProperty): Bool do - if nclassdef.mprop2npropdef.has_key(mprop) then - modelbuilder.error(self, "Error: A property {mprop} is already defined in class {nclassdef.mclassdef.mclass} at line {nclassdef.mprop2npropdef[mprop].location.line_start}.") + if mclassdef.mprop2npropdef.has_key(mprop) then + modelbuilder.error(self, "Error: A property {mprop} is already defined in class {mclassdef.mclass} at line {mclassdef.mprop2npropdef[mprop].location.line_start}.") return false end - if mprop isa MMethod and mprop.is_toplevel != (nclassdef isa ATopClassdef) then + if mprop isa MMethod and mprop.is_toplevel != (parent isa ATopClassdef) then if mprop.is_toplevel then modelbuilder.error(self, "Error: {mprop} is a top level method.") else @@ -323,12 +328,12 @@ redef class APropdef end if kwredef == null then if need_redef then - modelbuilder.error(self, "Redef error: {nclassdef.mclassdef.mclass}::{mprop.name} is an inherited property. To redefine it, add the redef keyword.") + modelbuilder.error(self, "Redef error: {mclassdef.mclass}::{mprop.name} is an inherited property. To redefine it, add the redef keyword.") return false end else if not need_redef then - modelbuilder.error(self, "Error: No property {nclassdef.mclassdef.mclass}::{mprop.name} is inherited. Remove the redef keyword to define a new property.") + modelbuilder.error(self, "Error: No property {mclassdef.mclass}::{mprop.name} is inherited. Remove the redef keyword to define a new property.") return false end end @@ -416,12 +421,11 @@ end redef class AMethPropdef redef type MPROPDEF: MMethodDef - redef fun build_property(modelbuilder, nclassdef) + redef fun build_property(modelbuilder, mclassdef) do var n_kwinit = n_kwinit var n_kwnew = n_kwnew var is_init = n_kwinit != null or n_kwnew != null - var mclassdef = nclassdef.mclassdef.as(not null) var name: String var amethodid = self.n_methid var name_node: ANode @@ -458,13 +462,13 @@ redef class AMethPropdef mprop = new MMethod(mclassdef, name, mvisibility) mprop.is_init = is_init mprop.is_new = n_kwnew != null - if nclassdef isa ATopClassdef then mprop.is_toplevel = true - if not self.check_redef_keyword(modelbuilder, nclassdef, n_kwredef, false, mprop) then return + if parent isa ATopClassdef then mprop.is_toplevel = true + if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, false, mprop) then return else - if not self.check_redef_keyword(modelbuilder, nclassdef, n_kwredef, not self isa AMainMethPropdef, mprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, not self isa AMainMethPropdef, mprop) then return check_redef_property_visibility(modelbuilder, self.n_visibility, mprop) end - nclassdef.mprop2npropdef[mprop] = self + mclassdef.mprop2npropdef[mprop] = self var mpropdef = new MMethodDef(mclassdef, mprop, self.location) @@ -624,9 +628,8 @@ redef class AAttrPropdef var mreadpropdef: nullable MMethodDef writable # The associated setter (write accessor) if any var mwritepropdef: nullable MMethodDef writable - redef fun build_property(modelbuilder, nclassdef) + redef fun build_property(modelbuilder, mclassdef) do - var mclassdef = nclassdef.mclassdef.as(not null) var mclass = mclassdef.mclass var name: String @@ -651,13 +654,13 @@ redef class AAttrPropdef 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, nclassdef, self.n_kwredef, false, mprop) then return + 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, nclassdef, self.n_kwredef, true, mprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, true, mprop) then return end - nclassdef.mprop2npropdef[mprop] = self + mclassdef.mprop2npropdef[mprop] = self var mpropdef = new MAttributeDef(mclassdef, mprop, self.location) self.mpropdef = mpropdef @@ -671,12 +674,12 @@ redef class AAttrPropdef if mreadprop == null then var mvisibility = new_property_visibility(modelbuilder, mclassdef, nreadable.n_visibility) mreadprop = new MMethod(mclassdef, readname, mvisibility) - if not self.check_redef_keyword(modelbuilder, nclassdef, nreadable.n_kwredef, false, mreadprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, nreadable.n_kwredef, false, mreadprop) then return else - if not self.check_redef_keyword(modelbuilder, nclassdef, nreadable.n_kwredef, true, mreadprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, nreadable.n_kwredef, true, mreadprop) then return check_redef_property_visibility(modelbuilder, nreadable.n_visibility, mreadprop) end - nclassdef.mprop2npropdef[mreadprop] = self + mclassdef.mprop2npropdef[mreadprop] = self var mreadpropdef = new MMethodDef(mclassdef, mreadprop, self.location) self.mreadpropdef = mreadpropdef @@ -691,12 +694,12 @@ redef class AAttrPropdef if mwriteprop == null then var mvisibility = new_property_visibility(modelbuilder, mclassdef, nwritable.n_visibility) mwriteprop = new MMethod(mclassdef, writename, mvisibility) - if not self.check_redef_keyword(modelbuilder, nclassdef, nwritable.n_kwredef, false, mwriteprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, nwritable.n_kwredef, false, mwriteprop) then return else - if not self.check_redef_keyword(modelbuilder, nclassdef, nwritable.n_kwredef, true, mwriteprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, nwritable.n_kwredef, true, mwriteprop) then return check_redef_property_visibility(modelbuilder, nwritable.n_visibility, mwriteprop) end - nclassdef.mprop2npropdef[mwriteprop] = self + mclassdef.mprop2npropdef[mwriteprop] = self var mwritepropdef = new MMethodDef(mclassdef, mwriteprop, self.location) self.mwritepropdef = mwritepropdef @@ -717,12 +720,12 @@ redef class AAttrPropdef 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, nclassdef, n_kwredef, false, mreadprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, false, mreadprop) then return else - if not self.check_redef_keyword(modelbuilder, nclassdef, n_kwredef, true, mreadprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, n_kwredef, true, mreadprop) then return check_redef_property_visibility(modelbuilder, self.n_visibility, mreadprop) end - nclassdef.mprop2npropdef[mreadprop] = self + mclassdef.mprop2npropdef[mreadprop] = self var mreadpropdef = new MMethodDef(mclassdef, mreadprop, self.location) self.mreadpropdef = mreadpropdef @@ -742,14 +745,14 @@ redef class AAttrPropdef mvisibility = private_visibility end mwriteprop = new MMethod(mclassdef, writename, mvisibility) - if not self.check_redef_keyword(modelbuilder, nclassdef, nwkwredef, false, mwriteprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef, false, mwriteprop) then return else - if not self.check_redef_keyword(modelbuilder, nclassdef, nwkwredef, true, mwriteprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, nwkwredef, true, mwriteprop) then return if nwritable != null then check_redef_property_visibility(modelbuilder, nwritable.n_visibility, mwriteprop) end end - nclassdef.mprop2npropdef[mwriteprop] = self + mclassdef.mprop2npropdef[mwriteprop] = self var mwritepropdef = new MMethodDef(mclassdef, mwriteprop, self.location) self.mwritepropdef = mwritepropdef @@ -934,9 +937,8 @@ end redef class ATypePropdef redef type MPROPDEF: MVirtualTypeDef - redef fun build_property(modelbuilder, nclassdef) + redef fun build_property(modelbuilder, mclassdef) do - var mclassdef = nclassdef.mclassdef.as(not null) var name = self.n_id.text var mprop = modelbuilder.try_get_mproperty_by_name(self.n_id, mclassdef, name) if mprop == null then @@ -946,13 +948,13 @@ redef class ATypePropdef modelbuilder.warning(n_id, "Warning: lowercase in the virtual type {name}") break end - if not self.check_redef_keyword(modelbuilder, nclassdef, self.n_kwredef, false, mprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, false, mprop) then return else - if not self.check_redef_keyword(modelbuilder, nclassdef, self.n_kwredef, true, mprop) then return + if not self.check_redef_keyword(modelbuilder, mclassdef, self.n_kwredef, true, mprop) then return assert mprop isa MVirtualTypeProp check_redef_property_visibility(modelbuilder, self.n_visibility, mprop) end - nclassdef.mprop2npropdef[mprop] = self + mclassdef.mprop2npropdef[mprop] = self var mpropdef = new MVirtualTypeDef(mclassdef, mprop, self.location) self.mpropdef = mpropdef diff --git a/src/nitg.nit b/src/nitg.nit index 0714632..66cd891 100644 --- a/src/nitg.nit +++ b/src/nitg.nit @@ -27,6 +27,7 @@ import separate_compiler import android_platform import compiler_ffi import pnacl_platform +import emscripten_platform redef class ToolContext redef fun process_options(args) diff --git a/src/nitvm.nit b/src/nitvm.nit new file mode 100644 index 0000000..9a62208 --- /dev/null +++ b/src/nitvm.nit @@ -0,0 +1,62 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2012 Jean Privat +# +# 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. + +# The Nit virtual machine launcher +module nitvm + +import vm + +# Create a tool context to handle options and paths +var toolcontext = new ToolContext +toolcontext.tooldescription = "Usage: nitvm [OPTION]... ...\nExecutes Nit programs with a virtual machine." +# Add an option "-o" to enable compatibility with the tests.sh script +var opt = new OptionString("compatibility (does nothing)", "-o") +toolcontext.option_context.add_option(opt) +var opt_mixins = new OptionArray("Additional modules to min-in", "-m") +toolcontext.option_context.add_option(opt_mixins) +# We do not add other options, so process them now! +toolcontext.process_options(args) + +# We need a model to collect stufs +var model = new Model + +# Add a model builder to parse files +var modelbuilder = new ModelBuilder(model, toolcontext.as(not null)) + +var arguments = toolcontext.option_context.rest +var progname = arguments.first + +# Here we load and process all modules passed on the command line +var mmodules = modelbuilder.parse([progname]) +mmodules.add_all modelbuilder.parse(opt_mixins.value) +modelbuilder.run_phases + +if toolcontext.opt_only_metamodel.value then exit(0) + +var mainmodule: nullable MModule + +# Here we launch the interpreter on the main module +if mmodules.length == 1 then + mainmodule = mmodules.first +else + mainmodule = new MModule(model, null, mmodules.first.name, mmodules.first.location) + mainmodule.set_imported_mmodules(mmodules) +end + +var self_mm = mainmodule.as(not null) +var self_args = arguments.as(not null) + +modelbuilder.run_naive_interpreter(self_mm, self_args) diff --git a/src/parser/nit.sablecc3xx b/src/parser/nit.sablecc3xx index 487d3b6..98bbcc2 100644 --- a/src/parser/nit.sablecc3xx +++ b/src/parser/nit.sablecc3xx @@ -367,7 +367,7 @@ extern_call_cast {-> extern_call} string_o {->string?} = string? {-> string}; -in_language = kwin string; +in_language = kwin no string [n1]:no {-> New in_language(kwin, string)}; extern_code_block = in_language? extern_code_segment; extern_code_block_o {-> extern_code_block?} = extern_code_block {-> extern_code_block} diff --git a/src/parser/parser.nit b/src/parser/parser.nit index c39a143..9a6f8d2 100644 --- a/src/parser/parser.nit +++ b/src/parser/parser.nit @@ -5081,11 +5081,13 @@ private class ReduceAction147 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 tkwinnode2 = nodearraylist1 assert tkwinnode2 isa nullable TKwin - var tstringnode3 = nodearraylist2 + var tstringnode3 = nodearraylist3 assert tstringnode3 isa nullable TString var pinlanguagenode1: nullable AInLanguage = new AInLanguage.init_ainlanguage( tkwinnode2, diff --git a/src/parser/tables_nit.c b/src/parser/tables_nit.c index aabd74f..852a50f 100644 --- a/src/parser/tables_nit.c +++ b/src/parser/tables_nit.c @@ -2637,9 +2637,10 @@ static int parser_action_row35[] = { 1, 0, 2 }; static int parser_action_row36[] = { - 2, - -1, 3, 35, - 89, 0, 152 + 3, + -1, 1, 380, + 0, 0, 1, + 1, 0, 2 }; static int parser_action_row37[] = { 24, @@ -3490,8 +3491,9 @@ static int parser_action_row152[] = { 84, 0, 297 }; static int parser_action_row153[] = { - 1, - -1, 1, 147 + 2, + -1, 3, 152, + 89, 0, 299 }; static int parser_action_row154[] = { 2, @@ -3559,9 +3561,9 @@ static int parser_action_row162[] = { static int parser_action_row163[] = { 4, -1, 1, 246, - 32, 0, 306, - 33, 0, 307, - 35, 0, 308 + 32, 0, 307, + 33, 0, 308, + 35, 0, 309 }; static int parser_action_row164[] = { 1, @@ -3570,29 +3572,29 @@ static int parser_action_row164[] = { static int parser_action_row165[] = { 3, -1, 1, 253, - 76, 0, 309, - 79, 0, 310 + 76, 0, 310, + 79, 0, 311 }; static int parser_action_row166[] = { 11, -1, 1, 255, - 42, 0, 311, - 67, 0, 312, - 68, 0, 313, - 72, 0, 314, - 73, 0, 315, - 74, 0, 316, - 75, 0, 317, - 77, 0, 318, - 78, 0, 319, - 80, 0, 320 + 42, 0, 312, + 67, 0, 313, + 68, 0, 314, + 72, 0, 315, + 73, 0, 316, + 74, 0, 317, + 75, 0, 318, + 77, 0, 319, + 78, 0, 320, + 80, 0, 321 }; static int parser_action_row167[] = { 4, -1, 1, 266, - 69, 0, 321, - 70, 0, 322, - 71, 0, 323 + 69, 0, 322, + 70, 0, 323, + 71, 0, 324 }; static int parser_action_row168[] = { 1, @@ -3606,13 +3608,13 @@ static int parser_action_row170[] = { 3, -1, 1, 276, 56, 0, 207, - 66, 0, 324 + 66, 0, 325 }; static int parser_action_row171[] = { 3, -1, 3, 170, - 44, 0, 326, - 85, 0, 327 + 44, 0, 327, + 85, 0, 328 }; static int parser_action_row172[] = { 2, @@ -3622,7 +3624,7 @@ static int parser_action_row172[] = { static int parser_action_row173[] = { 2, -1, 3, 172, - 84, 0, 329 + 84, 0, 330 }; static int parser_action_row174[] = { 24, @@ -3689,7 +3691,7 @@ static int parser_action_row177[] = { static int parser_action_row178[] = { 3, -1, 1, 363, - 59, 0, 332, + 59, 0, 333, 60, 0, 193 }; static int parser_action_row179[] = { @@ -3729,22 +3731,22 @@ static int parser_action_row181[] = { static int parser_action_row182[] = { 2, -1, 3, 181, - 27, 0, 335 + 27, 0, 336 }; static int parser_action_row183[] = { 3, -1, 3, 182, - 50, 0, 336, - 83, 0, 337 + 50, 0, 337, + 83, 0, 338 }; static int parser_action_row184[] = { 6, -1, 3, 183, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 54, 0, 342, - 84, 0, 343 + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 54, 0, 343, + 84, 0, 344 }; static int parser_action_row185[] = { 1, @@ -3769,8 +3771,8 @@ static int parser_action_row189[] = { static int parser_action_row190[] = { 3, -1, 3, 189, - 50, 0, 346, - 83, 0, 347 + 50, 0, 347, + 83, 0, 348 }; static int parser_action_row191[] = { 22, @@ -3875,13 +3877,13 @@ static int parser_action_row202[] = { static int parser_action_row203[] = { 8, -1, 3, 202, - 4, 0, 357, - 5, 0, 358, - 6, 0, 359, - 7, 0, 360, - 8, 0, 361, - 10, 0, 362, - 20, 0, 363 + 4, 0, 358, + 5, 0, 359, + 6, 0, 360, + 7, 0, 361, + 8, 0, 362, + 10, 0, 363, + 20, 0, 364 }; static int parser_action_row204[] = { 1, @@ -3946,9 +3948,9 @@ static int parser_action_row209[] = { static int parser_action_row210[] = { 4, -1, 1, 287, - 61, 0, 370, - 62, 0, 371, - 63, 0, 372 + 61, 0, 371, + 62, 0, 372, + 63, 0, 373 }; static int parser_action_row211[] = { 1, @@ -4041,16 +4043,16 @@ static int parser_action_row219[] = { static int parser_action_row220[] = { 4, -1, 1, 281, - 61, 0, 381, - 62, 0, 371, - 63, 0, 372 + 61, 0, 382, + 62, 0, 372, + 63, 0, 373 }; static int parser_action_row221[] = { 4, -1, 1, 283, - 61, 0, 383, - 62, 0, 371, - 63, 0, 372 + 61, 0, 384, + 62, 0, 372, + 63, 0, 373 }; static int parser_action_row222[] = { 1, @@ -4070,7 +4072,7 @@ static int parser_action_row223[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -4100,7 +4102,7 @@ static int parser_action_row225[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -4124,8 +4126,8 @@ static int parser_action_row227[] = { static int parser_action_row228[] = { 3, -1, 1, 360, - 12, 0, 388, - 84, 0, 389 + 12, 0, 389, + 84, 0, 390 }; static int parser_action_row229[] = { 2, @@ -4191,12 +4193,12 @@ static int parser_action_row240[] = { static int parser_action_row241[] = { 2, -1, 1, 89, - 14, 0, 394 + 14, 0, 395 }; static int parser_action_row242[] = { 2, -1, 3, 241, - 84, 0, 396 + 84, 0, 397 }; static int parser_action_row243[] = { 3, @@ -4258,8 +4260,8 @@ static int parser_action_row246[] = { static int parser_action_row247[] = { 3, -1, 3, 246, - 50, 0, 336, - 83, 0, 337 + 50, 0, 337, + 83, 0, 338 }; static int parser_action_row248[] = { 18, @@ -4308,13 +4310,13 @@ static int parser_action_row254[] = { 3, -1, 3, 253, 44, 0, 262, - 85, 0, 403 + 85, 0, 404 }; static int parser_action_row255[] = { 3, -1, 3, 254, 56, 0, 207, - 66, 0, 404 + 66, 0, 405 }; static int parser_action_row256[] = { 23, @@ -4330,7 +4332,7 @@ static int parser_action_row256[] = { 48, 0, 45, 51, 0, 158, 54, 0, 47, - 55, 0, 405, + 55, 0, 406, 56, 0, 48, 68, 0, 159, 83, 0, 49, @@ -4407,7 +4409,7 @@ static int parser_action_row267[] = { -1, 1, 380, 0, 0, 1, 1, 0, 2, - 27, 0, 411 + 27, 0, 412 }; static int parser_action_row268[] = { 3, @@ -4518,7 +4520,7 @@ static int parser_action_row285[] = { static int parser_action_row286[] = { 2, -1, 1, 360, - 84, 0, 389 + 84, 0, 390 }; static int parser_action_row287[] = { 2, @@ -4549,7 +4551,7 @@ static int parser_action_row291[] = { static int parser_action_row292[] = { 2, -1, 1, 207, - 61, 0, 433 + 61, 0, 434 }; static int parser_action_row293[] = { 2, @@ -4589,6 +4591,12 @@ static int parser_action_row299[] = { 1, 0, 2 }; static int parser_action_row300[] = { + 3, + -1, 1, 380, + 0, 0, 1, + 1, 0, 2 +}; +static int parser_action_row301[] = { 22, -1, 1, 362, 12, 0, 153, @@ -4613,7 +4621,7 @@ static int parser_action_row300[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row301[] = { +static int parser_action_row302[] = { 21, -1, 1, 362, 12, 0, 153, @@ -4637,13 +4645,13 @@ static int parser_action_row301[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row302[] = { +static int parser_action_row303[] = { 3, - -1, 3, 301, - 50, 0, 336, - 83, 0, 337 + -1, 3, 302, + 50, 0, 337, + 83, 0, 338 }; -static int parser_action_row303[] = { +static int parser_action_row304[] = { 20, -1, 1, 362, 12, 0, 153, @@ -4666,19 +4674,19 @@ static int parser_action_row303[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row304[] = { - 3, - -1, 3, 303, - 56, 0, 207, - 66, 0, 443 -}; static int parser_action_row305[] = { 3, -1, 3, 304, - 44, 0, 326, - 85, 0, 444 + 56, 0, 207, + 66, 0, 445 }; static int parser_action_row306[] = { + 3, + -1, 3, 305, + 44, 0, 327, + 85, 0, 446 +}; +static int parser_action_row307[] = { 20, -1, 1, 362, 12, 0, 153, @@ -4701,24 +4709,18 @@ static int parser_action_row306[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row307[] = { +static int parser_action_row308[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row308[] = { +static int parser_action_row309[] = { 4, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 27, 0, 447 -}; -static int parser_action_row309[] = { - 3, - -1, 1, 380, - 0, 0, 1, - 1, 0, 2 + 27, 0, 449 }; static int parser_action_row310[] = { 3, @@ -4817,53 +4819,59 @@ static int parser_action_row325[] = { 1, 0, 2 }; static int parser_action_row326[] = { + 3, + -1, 1, 380, + 0, 0, 1, + 1, 0, 2 +}; +static int parser_action_row327[] = { 1, -1, 1, 287 }; -static int parser_action_row327[] = { +static int parser_action_row328[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row328[] = { +static int parser_action_row329[] = { 1, -1, 1, 281 }; -static int parser_action_row329[] = { +static int parser_action_row330[] = { 1, -1, 1, 283 }; -static int parser_action_row330[] = { +static int parser_action_row331[] = { 1, -1, 1, 205 }; -static int parser_action_row331[] = { +static int parser_action_row332[] = { 1, -1, 1, 186 }; -static int parser_action_row332[] = { +static int parser_action_row333[] = { 1, -1, 1, 181 }; -static int parser_action_row333[] = { +static int parser_action_row334[] = { 1, -1, 1, 244 }; -static int parser_action_row334[] = { +static int parser_action_row335[] = { 1, -1, 1, 243 }; -static int parser_action_row335[] = { +static int parser_action_row336[] = { 2, - -1, 3, 334, - 27, 0, 466 + -1, 3, 335, + 27, 0, 468 }; -static int parser_action_row336[] = { +static int parser_action_row337[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -4893,170 +4901,170 @@ static int parser_action_row336[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row337[] = { +static int parser_action_row338[] = { 2, - -1, 3, 336, - 83, 0, 470 + -1, 3, 337, + 83, 0, 472 }; -static int parser_action_row338[] = { +static int parser_action_row339[] = { 3, -1, 1, 558, - 56, 0, 471, - 82, 0, 472 + 56, 0, 473, + 82, 0, 474 }; -static int parser_action_row339[] = { +static int parser_action_row340[] = { 2, - -1, 3, 338, - 66, 0, 475 + -1, 3, 339, + 66, 0, 477 }; -static int parser_action_row340[] = { +static int parser_action_row341[] = { 1, -1, 1, 341 }; -static int parser_action_row341[] = { +static int parser_action_row342[] = { 1, -1, 1, 339 }; -static int parser_action_row342[] = { +static int parser_action_row343[] = { 1, -1, 1, 340 }; -static int parser_action_row343[] = { +static int parser_action_row344[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row344[] = { +static int parser_action_row345[] = { 1, -1, 1, 338 }; -static int parser_action_row345[] = { +static int parser_action_row346[] = { 1, -1, 1, 315 }; -static int parser_action_row346[] = { +static int parser_action_row347[] = { 3, -1, 1, 318, - 54, 0, 477, + 54, 0, 479, 82, 0, 183 }; -static int parser_action_row347[] = { +static int parser_action_row348[] = { 2, - -1, 3, 346, - 83, 0, 479 + -1, 3, 347, + 83, 0, 481 }; -static int parser_action_row348[] = { +static int parser_action_row349[] = { 3, -1, 1, 318, - 56, 0, 480, + 56, 0, 482, 82, 0, 183 }; -static int parser_action_row349[] = { +static int parser_action_row350[] = { 2, - -1, 3, 348, - 59, 0, 482 + -1, 3, 349, + 59, 0, 484 }; -static int parser_action_row350[] = { +static int parser_action_row351[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row351[] = { +static int parser_action_row352[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row352[] = { +static int parser_action_row353[] = { 2, - -1, 3, 351, - 57, 0, 485 + -1, 3, 352, + 57, 0, 487 }; -static int parser_action_row353[] = { +static int parser_action_row354[] = { 1, -1, 1, 372 }; -static int parser_action_row354[] = { +static int parser_action_row355[] = { 1, -1, 1, 371 }; -static int parser_action_row355[] = { +static int parser_action_row356[] = { 1, -1, 1, 96 }; -static int parser_action_row356[] = { +static int parser_action_row357[] = { 1, -1, 1, 95 }; -static int parser_action_row357[] = { +static int parser_action_row358[] = { 1, -1, 1, 97 }; -static int parser_action_row358[] = { +static int parser_action_row359[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row359[] = { +static int parser_action_row360[] = { 1, -1, 1, 44 }; -static int parser_action_row360[] = { +static int parser_action_row361[] = { 2, - -1, 3, 359, - 5, 0, 487 + -1, 3, 360, + 5, 0, 489 }; -static int parser_action_row361[] = { +static int parser_action_row362[] = { 1, -1, 1, 46 }; -static int parser_action_row362[] = { +static int parser_action_row363[] = { 1, -1, 1, 47 }; -static int parser_action_row363[] = { - 17, - -1, 3, 362, - 56, 0, 488, - 67, 0, 489, - 68, 0, 490, - 69, 0, 491, - 70, 0, 492, - 71, 0, 493, - 72, 0, 494, - 73, 0, 495, - 74, 0, 496, - 75, 0, 497, - 76, 0, 498, - 77, 0, 499, - 78, 0, 500, - 79, 0, 501, - 80, 0, 502, - 84, 0, 503 -}; static int parser_action_row364[] = { - 2, + 17, -1, 3, 363, - 5, 0, 505 + 56, 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, + 79, 0, 503, + 80, 0, 504, + 84, 0, 505 }; static int parser_action_row365[] = { + 2, + -1, 3, 364, + 5, 0, 507 +}; +static int parser_action_row366[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row366[] = { +static int parser_action_row367[] = { 1, -1, 1, 173 }; -static int parser_action_row367[] = { +static int parser_action_row368[] = { 1, -1, 1, 837 }; -static int parser_action_row368[] = { +static int parser_action_row369[] = { 31, -1, 1, 170, 12, 0, 27, @@ -5090,7 +5098,7 @@ static int parser_action_row368[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row369[] = { +static int parser_action_row370[] = { 22, -1, 1, 362, 12, 0, 153, @@ -5115,15 +5123,15 @@ static int parser_action_row369[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row370[] = { +static int parser_action_row371[] = { 5, -1, 1, 362, - 12, 0, 507, - 49, 0, 508, + 12, 0, 509, + 49, 0, 510, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row371[] = { +static int parser_action_row372[] = { 22, -1, 1, 362, 12, 0, 153, @@ -5148,15 +5156,15 @@ static int parser_action_row371[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row372[] = { +static int parser_action_row373[] = { 1, -1, 1, 221 }; -static int parser_action_row373[] = { +static int parser_action_row374[] = { 1, -1, 1, 222 }; -static int parser_action_row374[] = { +static int parser_action_row375[] = { 22, -1, 1, 362, 12, 0, 153, @@ -5181,7 +5189,7 @@ static int parser_action_row374[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row375[] = { +static int parser_action_row376[] = { 24, -1, 1, 362, 12, 0, 153, @@ -5208,34 +5216,34 @@ static int parser_action_row375[] = { 92, 1, 312, 93, 0, 56 }; -static int parser_action_row376[] = { +static int parser_action_row377[] = { 1, -1, 1, 306 }; -static int parser_action_row377[] = { +static int parser_action_row378[] = { 1, -1, 1, 839 }; -static int parser_action_row378[] = { +static int parser_action_row379[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row379[] = { +static int parser_action_row380[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row380[] = { +static int parser_action_row381[] = { 1, -1, 1, 284 }; -static int parser_action_row381[] = { +static int parser_action_row382[] = { 1, -1, 1, 195 }; -static int parser_action_row382[] = { +static int parser_action_row383[] = { 22, -1, 1, 362, 12, 0, 153, @@ -5260,7 +5268,7 @@ static int parser_action_row382[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row383[] = { +static int parser_action_row384[] = { 22, -1, 1, 362, 12, 0, 153, @@ -5285,7 +5293,7 @@ static int parser_action_row383[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row384[] = { +static int parser_action_row385[] = { 22, -1, 1, 362, 12, 0, 153, @@ -5310,7 +5318,7 @@ static int parser_action_row384[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row385[] = { +static int parser_action_row386[] = { 22, -1, 1, 362, 12, 0, 153, @@ -5335,21 +5343,21 @@ static int parser_action_row385[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row386[] = { +static int parser_action_row387[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row387[] = { +static int parser_action_row388[] = { 1, -1, 1, 201 }; -static int parser_action_row388[] = { +static int parser_action_row389[] = { 1, -1, 1, 203 }; -static int parser_action_row389[] = { +static int parser_action_row390[] = { 23, -1, 1, 348, 12, 0, 108, @@ -5363,7 +5371,7 @@ static int parser_action_row389[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -5375,55 +5383,55 @@ static int parser_action_row389[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row390[] = { +static int parser_action_row391[] = { 1, -1, 1, 365 }; -static int parser_action_row391[] = { +static int parser_action_row392[] = { 1, -1, 1, 14 }; -static int parser_action_row392[] = { +static int parser_action_row393[] = { 7, - -1, 3, 391, - 5, 0, 358, - 6, 0, 359, - 7, 0, 360, - 8, 0, 361, - 10, 0, 362, - 20, 0, 363 + -1, 3, 392, + 5, 0, 359, + 6, 0, 360, + 7, 0, 361, + 8, 0, 362, + 10, 0, 363, + 20, 0, 364 }; -static int parser_action_row393[] = { +static int parser_action_row394[] = { 1, -1, 1, 15 }; -static int parser_action_row394[] = { +static int parser_action_row395[] = { 2, - -1, 3, 393, - 84, 0, 524 + -1, 3, 394, + 84, 0, 526 }; -static int parser_action_row395[] = { +static int parser_action_row396[] = { 7, - -1, 3, 394, + -1, 3, 395, 0, 0, 83, 1, 0, 84, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 84, 0, 343 + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 84, 0, 344 }; -static int parser_action_row396[] = { +static int parser_action_row397[] = { 3, - -1, 3, 395, + -1, 3, 396, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row397[] = { +static int parser_action_row398[] = { 2, -1, 1, 356, 60, 0, 193 }; -static int parser_action_row398[] = { +static int parser_action_row399[] = { 23, -1, 1, 362, 12, 0, 153, @@ -5437,7 +5445,7 @@ static int parser_action_row398[] = { 48, 0, 45, 51, 0, 158, 54, 0, 47, - 55, 0, 531, + 55, 0, 533, 56, 0, 48, 68, 0, 159, 83, 0, 49, @@ -5449,45 +5457,45 @@ static int parser_action_row398[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row399[] = { +static int parser_action_row400[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row400[] = { +static int parser_action_row401[] = { 1, -1, 1, 507 }; -static int parser_action_row401[] = { +static int parser_action_row402[] = { 3, -1, 1, 344, 54, 0, 242, - 66, 0, 534 + 66, 0, 536 }; -static int parser_action_row402[] = { +static int parser_action_row403[] = { 1, -1, 1, 528 }; -static int parser_action_row403[] = { +static int parser_action_row404[] = { 3, - -1, 3, 402, - 50, 0, 336, - 83, 0, 337 + -1, 3, 403, + 50, 0, 337, + 83, 0, 338 }; -static int parser_action_row404[] = { +static int parser_action_row405[] = { 3, -1, 1, 532, 56, 1, 534, 66, 1, 534 }; -static int parser_action_row405[] = { +static int parser_action_row406[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row406[] = { +static int parser_action_row407[] = { 6, -1, 1, 347, 56, 1, 343, @@ -5496,26 +5504,26 @@ static int parser_action_row406[] = { 63, 1, 343, 66, 1, 343 }; -static int parser_action_row407[] = { +static int parser_action_row408[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row408[] = { +static int parser_action_row409[] = { 2, - -1, 3, 407, - 55, 0, 539 + -1, 3, 408, + 55, 0, 541 }; -static int parser_action_row409[] = { +static int parser_action_row410[] = { 1, -1, 1, 527 }; -static int parser_action_row410[] = { +static int parser_action_row411[] = { 1, -1, 1, 537 }; -static int parser_action_row411[] = { +static int parser_action_row412[] = { 19, -1, 1, 362, 12, 0, 108, @@ -5537,13 +5545,13 @@ static int parser_action_row411[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row412[] = { +static int parser_action_row413[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row413[] = { +static int parser_action_row414[] = { 19, -1, 1, 362, 12, 0, 108, @@ -5565,7 +5573,7 @@ static int parser_action_row413[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row414[] = { +static int parser_action_row415[] = { 19, -1, 1, 362, 12, 0, 108, @@ -5587,7 +5595,7 @@ static int parser_action_row414[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row415[] = { +static int parser_action_row416[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5608,7 +5616,7 @@ static int parser_action_row415[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row416[] = { +static int parser_action_row417[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5629,13 +5637,13 @@ static int parser_action_row416[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row417[] = { +static int parser_action_row418[] = { 3, - -1, 3, 416, - 50, 0, 346, - 83, 0, 347 + -1, 3, 417, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row418[] = { +static int parser_action_row419[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5656,7 +5664,7 @@ static int parser_action_row418[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row419[] = { +static int parser_action_row420[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5677,7 +5685,7 @@ static int parser_action_row419[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row420[] = { +static int parser_action_row421[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5698,7 +5706,7 @@ static int parser_action_row420[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row421[] = { +static int parser_action_row422[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5719,7 +5727,7 @@ static int parser_action_row421[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row422[] = { +static int parser_action_row423[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5740,7 +5748,7 @@ static int parser_action_row422[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row423[] = { +static int parser_action_row424[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5761,7 +5769,7 @@ static int parser_action_row423[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row424[] = { +static int parser_action_row425[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5782,7 +5790,7 @@ static int parser_action_row424[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row425[] = { +static int parser_action_row426[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5803,7 +5811,7 @@ static int parser_action_row425[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row426[] = { +static int parser_action_row427[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5824,7 +5832,7 @@ static int parser_action_row426[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row427[] = { +static int parser_action_row428[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5845,7 +5853,7 @@ static int parser_action_row427[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row428[] = { +static int parser_action_row429[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5866,7 +5874,7 @@ static int parser_action_row428[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row429[] = { +static int parser_action_row430[] = { 18, -1, 1, 362, 12, 0, 108, @@ -5887,18 +5895,18 @@ static int parser_action_row429[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row430[] = { +static int parser_action_row431[] = { 5, -1, 1, 362, - 12, 0, 559, - 49, 0, 560, + 12, 0, 561, + 49, 0, 562, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row431[] = { +static int parser_action_row432[] = { 30, -1, 1, 362, - 9, 0, 563, + 9, 0, 565, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -5928,87 +5936,91 @@ static int parser_action_row431[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row432[] = { +static int parser_action_row433[] = { 3, - -1, 3, 431, + -1, 3, 432, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row433[] = { +static int parser_action_row434[] = { 3, - -1, 3, 432, - 50, 0, 346, - 83, 0, 347 + -1, 3, 433, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row434[] = { +static int parser_action_row435[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row435[] = { - 2, - -1, 1, 208, - 61, 0, 567 -}; static int parser_action_row436[] = { 2, - -1, 3, 435, - 26, 0, 568 + -1, 1, 208, + 61, 0, 569 }; static int parser_action_row437[] = { 2, -1, 3, 436, - 15, 0, 569 + 26, 0, 570 }; static int parser_action_row438[] = { 2, -1, 3, 437, - 84, 0, 297 + 15, 0, 571 }; static int parser_action_row439[] = { - 3, + 2, -1, 3, 438, - 31, 0, 571, - 58, 0, 572 + 84, 0, 297 }; static int parser_action_row440[] = { 3, + -1, 3, 439, + 31, 0, 573, + 58, 0, 574 +}; +static int parser_action_row441[] = { + 1, + -1, 1, 147 +}; +static int parser_action_row442[] = { + 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row441[] = { +static int parser_action_row443[] = { 1, -1, 1, 254 }; -static int parser_action_row442[] = { +static int parser_action_row444[] = { 3, -1, 1, 344, 54, 0, 242, - 66, 0, 475 + 66, 0, 477 }; -static int parser_action_row443[] = { +static int parser_action_row445[] = { 1, -1, 1, 275 }; -static int parser_action_row444[] = { +static int parser_action_row446[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row445[] = { +static int parser_action_row447[] = { 3, -1, 1, 279, 56, 1, 281, 66, 1, 281 }; -static int parser_action_row446[] = { +static int parser_action_row448[] = { 1, -1, 1, 274 }; -static int parser_action_row447[] = { +static int parser_action_row449[] = { 21, -1, 1, 362, 12, 0, 153, @@ -6032,13 +6044,13 @@ static int parser_action_row447[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row448[] = { +static int parser_action_row450[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row449[] = { +static int parser_action_row451[] = { 21, -1, 1, 362, 12, 0, 153, @@ -6062,7 +6074,7 @@ static int parser_action_row449[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row450[] = { +static int parser_action_row452[] = { 21, -1, 1, 362, 12, 0, 153, @@ -6086,7 +6098,7 @@ static int parser_action_row450[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row451[] = { +static int parser_action_row453[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6109,7 +6121,7 @@ static int parser_action_row451[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row452[] = { +static int parser_action_row454[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6132,13 +6144,13 @@ static int parser_action_row452[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row453[] = { +static int parser_action_row455[] = { 3, - -1, 3, 452, - 50, 0, 346, - 83, 0, 347 + -1, 3, 454, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row454[] = { +static int parser_action_row456[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6161,7 +6173,7 @@ static int parser_action_row454[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row455[] = { +static int parser_action_row457[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6184,7 +6196,7 @@ static int parser_action_row455[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row456[] = { +static int parser_action_row458[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6207,7 +6219,7 @@ static int parser_action_row456[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row457[] = { +static int parser_action_row459[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6230,7 +6242,7 @@ static int parser_action_row457[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row458[] = { +static int parser_action_row460[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6253,7 +6265,7 @@ static int parser_action_row458[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row459[] = { +static int parser_action_row461[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6276,7 +6288,7 @@ static int parser_action_row459[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row460[] = { +static int parser_action_row462[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6299,7 +6311,7 @@ static int parser_action_row460[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row461[] = { +static int parser_action_row463[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6322,7 +6334,7 @@ static int parser_action_row461[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row462[] = { +static int parser_action_row464[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6345,7 +6357,7 @@ static int parser_action_row462[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row463[] = { +static int parser_action_row465[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6368,7 +6380,7 @@ static int parser_action_row463[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row464[] = { +static int parser_action_row466[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6391,7 +6403,7 @@ static int parser_action_row464[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row465[] = { +static int parser_action_row467[] = { 20, -1, 1, 362, 12, 0, 153, @@ -6414,20 +6426,20 @@ static int parser_action_row465[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row466[] = { +static int parser_action_row468[] = { 5, -1, 1, 362, - 12, 0, 595, - 49, 0, 508, + 12, 0, 597, + 49, 0, 510, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row467[] = { +static int parser_action_row469[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -6457,18 +6469,18 @@ static int parser_action_row467[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row468[] = { +static int parser_action_row470[] = { 1, -1, 1, 165 }; -static int parser_action_row469[] = { +static int parser_action_row471[] = { 1, -1, 1, 240 }; -static int parser_action_row470[] = { +static int parser_action_row472[] = { 30, -1, 1, 362, - 9, 0, 599, + 9, 0, 601, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -6498,76 +6510,76 @@ static int parser_action_row470[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row471[] = { +static int parser_action_row473[] = { 3, -1, 1, 558, - 56, 0, 601, - 82, 0, 472 + 56, 0, 603, + 82, 0, 474 }; -static int parser_action_row472[] = { +static int parser_action_row474[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row473[] = { +static int parser_action_row475[] = { 6, - -1, 3, 472, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 54, 0, 604, - 84, 0, 343 + -1, 3, 474, + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 54, 0, 606, + 84, 0, 344 }; -static int parser_action_row474[] = { +static int parser_action_row476[] = { 1, -1, 1, 557 }; -static int parser_action_row475[] = { +static int parser_action_row477[] = { 1, -1, 1, 453 }; -static int parser_action_row476[] = { +static int parser_action_row478[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row477[] = { +static int parser_action_row479[] = { 5, - -1, 3, 476, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 84, 0, 343 + -1, 3, 478, + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 84, 0, 344 }; -static int parser_action_row478[] = { +static int parser_action_row480[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row479[] = { +static int parser_action_row481[] = { 1, -1, 1, 319 }; -static int parser_action_row480[] = { +static int parser_action_row482[] = { 3, -1, 1, 318, - 56, 0, 610, + 56, 0, 612, 82, 0, 183 }; -static int parser_action_row481[] = { +static int parser_action_row483[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row482[] = { +static int parser_action_row484[] = { 1, -1, 1, 153 }; -static int parser_action_row483[] = { +static int parser_action_row485[] = { 22, -1, 1, 362, 12, 0, 153, @@ -6592,117 +6604,117 @@ static int parser_action_row483[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row484[] = { +static int parser_action_row486[] = { 2, - -1, 3, 483, - 55, 0, 614 + -1, 3, 485, + 55, 0, 616 }; -static int parser_action_row485[] = { +static int parser_action_row487[] = { 3, -1, 1, 350, - 58, 0, 615, - 65, 0, 616 + 58, 0, 617, + 65, 0, 618 }; -static int parser_action_row486[] = { +static int parser_action_row488[] = { 1, -1, 1, 349 }; -static int parser_action_row487[] = { +static int parser_action_row489[] = { 4, - -1, 3, 486, - 9, 0, 619, + -1, 3, 488, + 9, 0, 621, 60, 0, 238, 84, 0, 239 }; -static int parser_action_row488[] = { +static int parser_action_row490[] = { 1, -1, 1, 45 }; -static int parser_action_row489[] = { +static int parser_action_row491[] = { 2, - -1, 3, 488, - 57, 0, 621 + -1, 3, 490, + 57, 0, 623 }; -static int parser_action_row490[] = { +static int parser_action_row492[] = { 1, -1, 1, 99 }; -static int parser_action_row491[] = { +static int parser_action_row493[] = { 1, -1, 1, 100 }; -static int parser_action_row492[] = { +static int parser_action_row494[] = { 1, -1, 1, 101 }; -static int parser_action_row493[] = { +static int parser_action_row495[] = { 1, -1, 1, 102 }; -static int parser_action_row494[] = { +static int parser_action_row496[] = { 1, -1, 1, 103 }; -static int parser_action_row495[] = { +static int parser_action_row497[] = { 1, -1, 1, 104 }; -static int parser_action_row496[] = { +static int parser_action_row498[] = { 1, -1, 1, 105 }; -static int parser_action_row497[] = { +static int parser_action_row499[] = { 1, -1, 1, 108 }; -static int parser_action_row498[] = { +static int parser_action_row500[] = { 1, -1, 1, 106 }; -static int parser_action_row499[] = { +static int parser_action_row501[] = { 1, -1, 1, 110 }; -static int parser_action_row500[] = { +static int parser_action_row502[] = { 1, -1, 1, 109 }; -static int parser_action_row501[] = { +static int parser_action_row503[] = { 1, -1, 1, 107 }; -static int parser_action_row502[] = { +static int parser_action_row504[] = { 1, -1, 1, 111 }; -static int parser_action_row503[] = { +static int parser_action_row505[] = { 1, -1, 1, 113 }; -static int parser_action_row504[] = { +static int parser_action_row506[] = { 2, -1, 1, 98, - 61, 0, 622 + 61, 0, 624 }; -static int parser_action_row505[] = { +static int parser_action_row507[] = { 5, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 54, 0, 623, - 59, 0, 624 + 54, 0, 625, + 59, 0, 626 }; -static int parser_action_row506[] = { +static int parser_action_row508[] = { 1, -1, 1, 48 }; -static int parser_action_row507[] = { +static int parser_action_row509[] = { 3, - -1, 3, 506, - 83, 0, 628, - 84, 0, 629 + -1, 3, 508, + 83, 0, 630, + 84, 0, 631 }; -static int parser_action_row508[] = { +static int parser_action_row510[] = { 25, -1, 1, 348, 12, 0, 108, @@ -6730,18 +6742,18 @@ static int parser_action_row508[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row509[] = { +static int parser_action_row511[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row510[] = { +static int parser_action_row512[] = { 2, - -1, 3, 509, - 85, 0, 636 + -1, 3, 511, + 85, 0, 638 }; -static int parser_action_row511[] = { +static int parser_action_row513[] = { 28, -1, 1, 348, 12, 0, 108, @@ -6772,58 +6784,58 @@ static int parser_action_row511[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row512[] = { +static int parser_action_row514[] = { 3, -1, 1, 359, - 12, 0, 639, + 12, 0, 641, 84, 0, 223 }; -static int parser_action_row513[] = { +static int parser_action_row515[] = { 4, -1, 1, 361, - 12, 0, 640, + 12, 0, 642, 83, 0, 49, 84, 0, 225 }; -static int parser_action_row514[] = { +static int parser_action_row516[] = { 1, -1, 1, 215 }; -static int parser_action_row515[] = { +static int parser_action_row517[] = { 1, -1, 1, 220 }; -static int parser_action_row516[] = { +static int parser_action_row518[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row517[] = { +static int parser_action_row519[] = { 1, -1, 1, 307 }; -static int parser_action_row518[] = { +static int parser_action_row520[] = { 1, -1, 1, 308 }; -static int parser_action_row519[] = { +static int parser_action_row521[] = { 1, -1, 1, 212 }; -static int parser_action_row520[] = { +static int parser_action_row522[] = { 1, -1, 1, 217 }; -static int parser_action_row521[] = { +static int parser_action_row523[] = { 1, -1, 1, 214 }; -static int parser_action_row522[] = { +static int parser_action_row524[] = { 1, -1, 1, 219 }; -static int parser_action_row523[] = { +static int parser_action_row525[] = { 23, -1, 1, 362, 12, 0, 153, @@ -6837,7 +6849,7 @@ static int parser_action_row523[] = { 48, 0, 45, 51, 0, 158, 54, 0, 47, - 55, 0, 643, + 55, 0, 645, 56, 0, 48, 68, 0, 159, 83, 0, 49, @@ -6849,86 +6861,86 @@ static int parser_action_row523[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row524[] = { +static int parser_action_row526[] = { 1, -1, 1, 202 }; -static int parser_action_row525[] = { +static int parser_action_row527[] = { 2, -1, 1, 357, 60, 0, 193 }; -static int parser_action_row526[] = { +static int parser_action_row528[] = { 2, - -1, 3, 525, - 84, 0, 645 + -1, 3, 527, + 84, 0, 647 }; -static int parser_action_row527[] = { +static int parser_action_row529[] = { 2, -1, 1, 322, - 58, 0, 646 + 58, 0, 648 }; -static int parser_action_row528[] = { +static int parser_action_row530[] = { 1, -1, 1, 87 }; -static int parser_action_row529[] = { +static int parser_action_row531[] = { 1, -1, 1, 321 }; -static int parser_action_row530[] = { +static int parser_action_row532[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row531[] = { +static int parser_action_row533[] = { 1, -1, 1, 16 }; -static int parser_action_row532[] = { +static int parser_action_row534[] = { 1, -1, 1, 343 }; -static int parser_action_row533[] = { +static int parser_action_row535[] = { 2, - -1, 3, 532, - 55, 0, 653 + -1, 3, 534, + 55, 0, 655 }; -static int parser_action_row534[] = { +static int parser_action_row536[] = { 2, - -1, 3, 533, - 26, 0, 654 + -1, 3, 535, + 26, 0, 656 }; -static int parser_action_row535[] = { +static int parser_action_row537[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row536[] = { +static int parser_action_row538[] = { 1, -1, 1, 530 }; -static int parser_action_row537[] = { +static int parser_action_row539[] = { 2, - -1, 3, 536, - 66, 0, 534 + -1, 3, 538, + 66, 0, 536 }; -static int parser_action_row538[] = { +static int parser_action_row540[] = { 5, -1, 1, 362, - 12, 0, 559, - 49, 0, 560, + 12, 0, 561, + 49, 0, 562, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row539[] = { +static int parser_action_row541[] = { 2, -1, 1, 350, - 58, 0, 615 + 58, 0, 617 }; -static int parser_action_row540[] = { +static int parser_action_row542[] = { 6, -1, 1, 345, 56, 1, 342, @@ -6937,11 +6949,11 @@ static int parser_action_row540[] = { 63, 1, 342, 66, 1, 342 }; -static int parser_action_row541[] = { +static int parser_action_row543[] = { 1, -1, 1, 503 }; -static int parser_action_row542[] = { +static int parser_action_row544[] = { 19, -1, 1, 362, 12, 0, 108, @@ -6963,127 +6975,127 @@ static int parser_action_row542[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row543[] = { +static int parser_action_row545[] = { 1, -1, 1, 502 }; -static int parser_action_row544[] = { +static int parser_action_row546[] = { 1, -1, 1, 505 }; -static int parser_action_row545[] = { +static int parser_action_row547[] = { 3, -1, 1, 513, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row546[] = { +static int parser_action_row548[] = { 3, -1, 1, 516, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row547[] = { +static int parser_action_row549[] = { 1, -1, 1, 518 }; -static int parser_action_row548[] = { +static int parser_action_row550[] = { 4, -1, 1, 520, 69, 0, 280, 70, 0, 281, 71, 0, 282 }; -static int parser_action_row549[] = { +static int parser_action_row551[] = { 4, -1, 1, 521, 69, 0, 280, 70, 0, 281, 71, 0, 282 }; -static int parser_action_row550[] = { +static int parser_action_row552[] = { 3, -1, 1, 509, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row551[] = { +static int parser_action_row553[] = { 3, -1, 1, 510, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row552[] = { +static int parser_action_row554[] = { 3, -1, 1, 511, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row553[] = { +static int parser_action_row555[] = { 3, -1, 1, 512, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row554[] = { +static int parser_action_row556[] = { 3, -1, 1, 514, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row555[] = { +static int parser_action_row557[] = { 3, -1, 1, 515, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row556[] = { +static int parser_action_row558[] = { 3, -1, 1, 517, 67, 0, 271, 68, 0, 272 }; -static int parser_action_row557[] = { +static int parser_action_row559[] = { 1, -1, 1, 523 }; -static int parser_action_row558[] = { +static int parser_action_row560[] = { 1, -1, 1, 524 }; -static int parser_action_row559[] = { +static int parser_action_row561[] = { 1, -1, 1, 525 }; -static int parser_action_row560[] = { +static int parser_action_row562[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row561[] = { +static int parser_action_row563[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row562[] = { +static int parser_action_row564[] = { 2, - -1, 3, 561, - 85, 0, 660 + -1, 3, 563, + 85, 0, 662 }; -static int parser_action_row563[] = { +static int parser_action_row565[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row564[] = { +static int parser_action_row566[] = { 1, -1, 1, 171 }; -static int parser_action_row565[] = { +static int parser_action_row567[] = { 30, -1, 1, 362, - 9, 0, 662, + 9, 0, 664, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -7113,11 +7125,11 @@ static int parser_action_row565[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row566[] = { +static int parser_action_row568[] = { 1, -1, 1, 161 }; -static int parser_action_row567[] = { +static int parser_action_row569[] = { 22, -1, 1, 362, 12, 0, 153, @@ -7142,37 +7154,37 @@ static int parser_action_row567[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row568[] = { +static int parser_action_row570[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row569[] = { +static int parser_action_row571[] = { 33, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 665, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 27, 0, 670, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 667, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 27, 0, 672, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -7184,7 +7196,7 @@ static int parser_action_row569[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row570[] = { +static int parser_action_row572[] = { 32, -1, 1, 362, 0, 0, 1, @@ -7219,46 +7231,46 @@ static int parser_action_row570[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row571[] = { +static int parser_action_row573[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row572[] = { +static int parser_action_row574[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row573[] = { +static int parser_action_row575[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row574[] = { +static int parser_action_row576[] = { 2, - -1, 3, 573, - 26, 0, 702 + -1, 3, 575, + 26, 0, 704 }; -static int parser_action_row575[] = { +static int parser_action_row577[] = { 1, -1, 1, 277 }; -static int parser_action_row576[] = { +static int parser_action_row578[] = { 5, -1, 1, 362, - 12, 0, 595, - 49, 0, 508, + 12, 0, 597, + 49, 0, 510, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row577[] = { +static int parser_action_row579[] = { 1, -1, 1, 250 }; -static int parser_action_row578[] = { +static int parser_action_row580[] = { 21, -1, 1, 362, 12, 0, 153, @@ -7282,169 +7294,169 @@ static int parser_action_row578[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row579[] = { +static int parser_action_row581[] = { 1, -1, 1, 249 }; -static int parser_action_row580[] = { +static int parser_action_row582[] = { 1, -1, 1, 252 }; -static int parser_action_row581[] = { +static int parser_action_row583[] = { 3, -1, 1, 260, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row582[] = { +static int parser_action_row584[] = { 3, -1, 1, 263, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row583[] = { +static int parser_action_row585[] = { 1, -1, 1, 265 }; -static int parser_action_row584[] = { +static int parser_action_row586[] = { 4, -1, 1, 267, - 69, 0, 321, - 70, 0, 322, - 71, 0, 323 + 69, 0, 322, + 70, 0, 323, + 71, 0, 324 }; -static int parser_action_row585[] = { +static int parser_action_row587[] = { 4, -1, 1, 268, - 69, 0, 321, - 70, 0, 322, - 71, 0, 323 + 69, 0, 322, + 70, 0, 323, + 71, 0, 324 }; -static int parser_action_row586[] = { +static int parser_action_row588[] = { 3, -1, 1, 256, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row587[] = { +static int parser_action_row589[] = { 3, -1, 1, 257, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row588[] = { +static int parser_action_row590[] = { 3, -1, 1, 258, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row589[] = { +static int parser_action_row591[] = { 3, -1, 1, 259, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row590[] = { +static int parser_action_row592[] = { 3, -1, 1, 261, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row591[] = { +static int parser_action_row593[] = { 3, -1, 1, 262, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row592[] = { +static int parser_action_row594[] = { 3, -1, 1, 264, - 67, 0, 312, - 68, 0, 313 + 67, 0, 313, + 68, 0, 314 }; -static int parser_action_row593[] = { +static int parser_action_row595[] = { 1, -1, 1, 270 }; -static int parser_action_row594[] = { +static int parser_action_row596[] = { 1, -1, 1, 271 }; -static int parser_action_row595[] = { +static int parser_action_row597[] = { 1, -1, 1, 272 }; -static int parser_action_row596[] = { +static int parser_action_row598[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row597[] = { +static int parser_action_row599[] = { 2, - -1, 3, 596, - 85, 0, 705 + -1, 3, 598, + 85, 0, 707 }; -static int parser_action_row598[] = { +static int parser_action_row600[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row599[] = { +static int parser_action_row601[] = { 1, -1, 1, 241 }; -static int parser_action_row600[] = { +static int parser_action_row602[] = { 1, -1, 1, 164 }; -static int parser_action_row601[] = { +static int parser_action_row603[] = { 1, -1, 1, 163 }; -static int parser_action_row602[] = { +static int parser_action_row604[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row603[] = { +static int parser_action_row605[] = { 1, -1, 1, 454 }; -static int parser_action_row604[] = { +static int parser_action_row606[] = { 3, - -1, 3, 603, - 50, 0, 346, - 83, 0, 347 + -1, 3, 605, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row605[] = { +static int parser_action_row607[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row606[] = { +static int parser_action_row608[] = { 2, -1, 1, 558, - 82, 0, 472 + 82, 0, 474 }; -static int parser_action_row607[] = { +static int parser_action_row609[] = { 1, -1, 1, 555 }; -static int parser_action_row608[] = { +static int parser_action_row610[] = { 3, - -1, 3, 607, + -1, 3, 609, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row609[] = { +static int parser_action_row611[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row610[] = { +static int parser_action_row612[] = { 35, -1, 1, 362, 12, 0, 153, @@ -7455,10 +7467,10 @@ static int parser_action_row610[] = { 29, 0, 33, 30, 0, 34, 34, 0, 155, - 36, 0, 716, - 37, 0, 717, - 38, 0, 718, - 39, 0, 719, + 36, 0, 718, + 37, 0, 719, + 38, 0, 720, + 39, 0, 721, 40, 0, 40, 41, 0, 156, 43, 0, 157, @@ -7466,14 +7478,14 @@ static int parser_action_row610[] = { 46, 0, 43, 47, 0, 44, 48, 0, 45, - 50, 0, 346, + 50, 0, 347, 51, 0, 158, - 53, 0, 720, + 53, 0, 722, 54, 0, 47, 56, 0, 48, 68, 0, 159, 82, 0, 183, - 83, 0, 721, + 83, 0, 723, 84, 0, 50, 86, 0, 51, 87, 0, 52, @@ -7482,160 +7494,160 @@ static int parser_action_row610[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row611[] = { +static int parser_action_row613[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row612[] = { +static int parser_action_row614[] = { 1, -1, 1, 154 }; -static int parser_action_row613[] = { +static int parser_action_row615[] = { 3, - -1, 3, 612, - 50, 0, 346, - 83, 0, 347 + -1, 3, 614, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row614[] = { +static int parser_action_row616[] = { 1, -1, 1, 204 }; -static int parser_action_row615[] = { +static int parser_action_row617[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row616[] = { +static int parser_action_row618[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row617[] = { +static int parser_action_row619[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row618[] = { +static int parser_action_row620[] = { 1, -1, 1, 846 }; -static int parser_action_row619[] = { +static int parser_action_row621[] = { 2, -1, 1, 351, - 58, 0, 615 + 58, 0, 617 }; -static int parser_action_row620[] = { +static int parser_action_row622[] = { 3, - -1, 3, 619, + -1, 3, 621, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row621[] = { +static int parser_action_row623[] = { 2, -1, 1, 89, - 14, 0, 394 + 14, 0, 395 }; -static int parser_action_row622[] = { +static int parser_action_row624[] = { 2, -1, 1, 112, - 61, 0, 746 + 61, 0, 748 }; -static int parser_action_row623[] = { +static int parser_action_row625[] = { 1, -1, 1, 114 }; -static int parser_action_row624[] = { +static int parser_action_row626[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row625[] = { +static int parser_action_row627[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row626[] = { +static int parser_action_row628[] = { 4, -1, 1, 131, - 4, 0, 749, - 14, 0, 750, - 15, 0, 751 + 4, 0, 751, + 14, 0, 752, + 15, 0, 753 }; -static int parser_action_row627[] = { +static int parser_action_row629[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row628[] = { +static int parser_action_row630[] = { 1, -1, 1, 119 }; -static int parser_action_row629[] = { +static int parser_action_row631[] = { 2, -1, 1, 367, 60, 0, 192 }; -static int parser_action_row630[] = { +static int parser_action_row632[] = { 2, - -1, 3, 629, + -1, 3, 631, 60, 0, 193 }; -static int parser_action_row631[] = { +static int parser_action_row633[] = { 2, -1, 1, 51, - 56, 0, 756 + 56, 0, 758 }; -static int parser_action_row632[] = { +static int parser_action_row634[] = { 2, - -1, 3, 631, - 83, 0, 758 + -1, 3, 633, + 83, 0, 760 }; -static int parser_action_row633[] = { +static int parser_action_row635[] = { 3, - -1, 3, 632, - 83, 0, 759, - 84, 0, 629 + -1, 3, 634, + 83, 0, 761, + 84, 0, 631 }; -static int parser_action_row634[] = { +static int parser_action_row636[] = { 1, -1, 1, 285 }; -static int parser_action_row635[] = { +static int parser_action_row637[] = { 1, -1, 1, 196 }; -static int parser_action_row636[] = { +static int parser_action_row638[] = { 3, - -1, 3, 635, - 34, 0, 761, - 54, 0, 762 + -1, 3, 637, + 34, 0, 763, + 54, 0, 764 }; -static int parser_action_row637[] = { +static int parser_action_row639[] = { 4, -1, 1, 280, - 61, 0, 763, - 62, 0, 371, - 63, 0, 372 + 61, 0, 765, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row638[] = { +static int parser_action_row640[] = { 4, -1, 1, 282, - 61, 0, 765, - 62, 0, 371, - 63, 0, 372 + 61, 0, 767, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row639[] = { +static int parser_action_row641[] = { 1, -1, 1, 193 }; -static int parser_action_row640[] = { +static int parser_action_row642[] = { 23, -1, 1, 348, 12, 0, 108, @@ -7649,7 +7661,7 @@ static int parser_action_row640[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -7661,7 +7673,7 @@ static int parser_action_row640[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row641[] = { +static int parser_action_row643[] = { 23, -1, 1, 348, 12, 0, 108, @@ -7675,7 +7687,7 @@ static int parser_action_row641[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -7687,63 +7699,63 @@ static int parser_action_row641[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row642[] = { +static int parser_action_row644[] = { 3, -1, 1, 360, - 12, 0, 769, - 84, 0, 389 + 12, 0, 771, + 84, 0, 390 }; -static int parser_action_row643[] = { +static int parser_action_row645[] = { 1, -1, 1, 311 }; -static int parser_action_row644[] = { +static int parser_action_row646[] = { 1, -1, 1, 347 }; -static int parser_action_row645[] = { +static int parser_action_row647[] = { 2, - -1, 3, 644, - 55, 0, 770 + -1, 3, 646, + 55, 0, 772 }; -static int parser_action_row646[] = { +static int parser_action_row648[] = { 2, -1, 1, 358, 60, 0, 193 }; -static int parser_action_row647[] = { +static int parser_action_row649[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row648[] = { +static int parser_action_row650[] = { 1, -1, 1, 840 }; -static int parser_action_row649[] = { +static int parser_action_row651[] = { 2, -1, 1, 323, - 58, 0, 646 + 58, 0, 648 }; -static int parser_action_row650[] = { +static int parser_action_row652[] = { 2, - -1, 3, 649, - 9, 0, 773 + -1, 3, 651, + 9, 0, 775 }; -static int parser_action_row651[] = { +static int parser_action_row653[] = { 1, -1, 1, 842 }; -static int parser_action_row652[] = { +static int parser_action_row654[] = { 5, - -1, 3, 651, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 84, 0, 343 + -1, 3, 653, + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 84, 0, 344 }; -static int parser_action_row653[] = { +static int parser_action_row655[] = { 5, -1, 1, 380, 0, 0, 1, @@ -7751,58 +7763,58 @@ static int parser_action_row653[] = { 9, 1, 324, 15, 1, 324 }; -static int parser_action_row654[] = { +static int parser_action_row656[] = { 1, -1, 1, 342 }; -static int parser_action_row655[] = { +static int parser_action_row657[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row656[] = { +static int parser_action_row658[] = { 3, - -1, 3, 655, + -1, 3, 657, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row657[] = { +static int parser_action_row659[] = { 2, - -1, 3, 656, - 85, 0, 778 + -1, 3, 658, + 85, 0, 780 }; -static int parser_action_row658[] = { +static int parser_action_row660[] = { 1, -1, 1, 504 }; -static int parser_action_row659[] = { +static int parser_action_row661[] = { 1, -1, 1, 538 }; -static int parser_action_row660[] = { +static int parser_action_row662[] = { 3, - -1, 3, 659, - 34, 0, 779, - 54, 0, 780 + -1, 3, 661, + 34, 0, 781, + 54, 0, 782 }; -static int parser_action_row661[] = { +static int parser_action_row663[] = { 1, -1, 1, 533 }; -static int parser_action_row662[] = { +static int parser_action_row664[] = { 1, -1, 1, 535 }; -static int parser_action_row663[] = { +static int parser_action_row665[] = { 1, -1, 1, 172 }; -static int parser_action_row664[] = { +static int parser_action_row666[] = { 1, -1, 1, 209 }; -static int parser_action_row665[] = { +static int parser_action_row667[] = { 22, -1, 1, 362, 12, 0, 153, @@ -7827,11 +7839,11 @@ static int parser_action_row665[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row666[] = { +static int parser_action_row668[] = { 1, -1, 1, 231 }; -static int parser_action_row667[] = { +static int parser_action_row669[] = { 25, -1, 1, 348, 12, 0, 108, @@ -7859,30 +7871,30 @@ static int parser_action_row667[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row668[] = { +static int parser_action_row670[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 783, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 785, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -7894,23 +7906,23 @@ static int parser_action_row668[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row669[] = { +static int parser_action_row671[] = { 2, - -1, 3, 668, - 84, 0, 788 + -1, 3, 670, + 84, 0, 790 }; -static int parser_action_row670[] = { +static int parser_action_row672[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row671[] = { +static int parser_action_row673[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -7940,36 +7952,36 @@ static int parser_action_row671[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row672[] = { +static int parser_action_row674[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row673[] = { +static int parser_action_row675[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 783, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 785, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -7981,13 +7993,13 @@ static int parser_action_row673[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row674[] = { +static int parser_action_row676[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row675[] = { +static int parser_action_row677[] = { 25, -1, 1, 176, 12, 0, 153, @@ -8015,7 +8027,7 @@ static int parser_action_row675[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row676[] = { +static int parser_action_row678[] = { 26, -1, 1, 183, 12, 0, 153, @@ -8044,7 +8056,7 @@ static int parser_action_row676[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row677[] = { +static int parser_action_row679[] = { 26, -1, 1, 178, 12, 0, 153, @@ -8073,12 +8085,12 @@ static int parser_action_row677[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row678[] = { +static int parser_action_row680[] = { 2, -1, 1, 182, 27, 1, 633 }; -static int parser_action_row679[] = { +static int parser_action_row681[] = { 22, -1, 1, 362, 12, 0, 153, @@ -8103,32 +8115,32 @@ static int parser_action_row679[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row680[] = { +static int parser_action_row682[] = { 2, - -1, 3, 679, - 11, 0, 802 + -1, 3, 681, + 11, 0, 804 }; -static int parser_action_row681[] = { +static int parser_action_row683[] = { 1, -1, 1, 226 }; -static int parser_action_row682[] = { +static int parser_action_row684[] = { 1, -1, 1, 228 }; -static int parser_action_row683[] = { +static int parser_action_row685[] = { 3, - -1, 3, 682, + -1, 3, 684, 56, 0, 207, - 66, 0, 803 + 66, 0, 805 }; -static int parser_action_row684[] = { +static int parser_action_row686[] = { 3, - -1, 3, 683, - 44, 0, 805, - 85, 0, 806 + -1, 3, 685, + 44, 0, 807, + 85, 0, 808 }; -static int parser_action_row685[] = { +static int parser_action_row687[] = { 28, -1, 1, 348, 12, 0, 108, @@ -8159,21 +8171,21 @@ static int parser_action_row685[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row686[] = { +static int parser_action_row688[] = { 3, -1, 1, 359, - 12, 0, 809, + 12, 0, 811, 84, 0, 223 }; -static int parser_action_row687[] = { +static int parser_action_row689[] = { 31, -1, 1, 362, - 9, 0, 665, + 9, 0, 667, 12, 0, 27, 15, 0, 29, 18, 0, 30, 25, 0, 31, - 27, 0, 670, + 27, 0, 672, 28, 0, 32, 29, 0, 33, 30, 0, 34, @@ -8199,66 +8211,66 @@ static int parser_action_row687[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row688[] = { +static int parser_action_row690[] = { 2, - -1, 3, 687, - 27, 0, 813 + -1, 3, 689, + 27, 0, 815 }; -static int parser_action_row689[] = { +static int parser_action_row691[] = { 1, -1, 1, 625 }; -static int parser_action_row690[] = { +static int parser_action_row692[] = { 1, -1, 1, 626 }; -static int parser_action_row691[] = { +static int parser_action_row693[] = { 1, -1, 1, 638 }; -static int parser_action_row692[] = { +static int parser_action_row694[] = { 1, -1, 1, 639 }; -static int parser_action_row693[] = { +static int parser_action_row695[] = { 1, -1, 1, 641 }; -static int parser_action_row694[] = { +static int parser_action_row696[] = { 1, -1, 1, 640 }; -static int parser_action_row695[] = { +static int parser_action_row697[] = { 1, -1, 1, 642 }; -static int parser_action_row696[] = { +static int parser_action_row698[] = { 1, -1, 1, 643 }; -static int parser_action_row697[] = { +static int parser_action_row699[] = { 4, -1, 1, 361, - 12, 0, 814, + 12, 0, 816, 83, 0, 49, 84, 0, 225 }; -static int parser_action_row698[] = { +static int parser_action_row700[] = { 1, -1, 1, 235 }; -static int parser_action_row699[] = { +static int parser_action_row701[] = { 2, - -1, 3, 698, + -1, 3, 700, 52, 0, 172 }; -static int parser_action_row700[] = { +static int parser_action_row702[] = { 3, - -1, 3, 699, - 55, 0, 817, - 58, 0, 572 + -1, 3, 701, + 55, 0, 819, + 58, 0, 574 }; -static int parser_action_row701[] = { +static int parser_action_row703[] = { 22, -1, 1, 362, 12, 0, 153, @@ -8283,85 +8295,85 @@ static int parser_action_row701[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row702[] = { +static int parser_action_row704[] = { 2, - -1, 3, 701, - 84, 0, 819 + -1, 3, 703, + 84, 0, 821 }; -static int parser_action_row703[] = { +static int parser_action_row705[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row704[] = { +static int parser_action_row706[] = { 2, - -1, 3, 703, - 85, 0, 821 + -1, 3, 705, + 85, 0, 823 }; -static int parser_action_row705[] = { +static int parser_action_row707[] = { 1, -1, 1, 251 }; -static int parser_action_row706[] = { +static int parser_action_row708[] = { 1, -1, 1, 280 }; -static int parser_action_row707[] = { +static int parser_action_row709[] = { 1, -1, 1, 282 }; -static int parser_action_row708[] = { +static int parser_action_row710[] = { 3, - -1, 3, 707, - 50, 0, 346, - 83, 0, 347 + -1, 3, 709, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row709[] = { +static int parser_action_row711[] = { 2, -1, 1, 157, - 58, 0, 823 + 58, 0, 825 }; -static int parser_action_row710[] = { +static int parser_action_row712[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row711[] = { +static int parser_action_row713[] = { 5, - -1, 3, 710, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 84, 0, 343 + -1, 3, 712, + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 84, 0, 344 }; -static int parser_action_row712[] = { +static int parser_action_row714[] = { 1, -1, 1, 559 }; -static int parser_action_row713[] = { +static int parser_action_row715[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row714[] = { +static int parser_action_row716[] = { 2, - -1, 3, 713, + -1, 3, 715, 84, 0, 223 }; -static int parser_action_row715[] = { +static int parser_action_row717[] = { 3, - -1, 3, 714, + -1, 3, 716, 83, 0, 49, 84, 0, 225 }; -static int parser_action_row716[] = { +static int parser_action_row718[] = { 2, - -1, 3, 715, - 55, 0, 830 + -1, 3, 717, + 55, 0, 832 }; -static int parser_action_row717[] = { +static int parser_action_row719[] = { 24, -1, 1, 737, 12, 0, 153, @@ -8388,7 +8400,7 @@ static int parser_action_row717[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row718[] = { +static int parser_action_row720[] = { 25, -1, 1, 744, 12, 0, 153, @@ -8416,7 +8428,7 @@ static int parser_action_row718[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row719[] = { +static int parser_action_row721[] = { 25, -1, 1, 739, 12, 0, 153, @@ -8444,111 +8456,111 @@ static int parser_action_row719[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row720[] = { +static int parser_action_row722[] = { 1, -1, 1, 743 }; -static int parser_action_row721[] = { +static int parser_action_row723[] = { 2, - -1, 3, 720, - 11, 0, 836 + -1, 3, 722, + 11, 0, 838 }; -static int parser_action_row722[] = { +static int parser_action_row724[] = { 4, -1, 1, 318, - 56, 0, 480, + 56, 0, 482, 60, 0, 192, 82, 0, 183 }; -static int parser_action_row723[] = { +static int parser_action_row725[] = { 1, -1, 1, 334 }; -static int parser_action_row724[] = { +static int parser_action_row726[] = { 1, -1, 1, 735 }; -static int parser_action_row725[] = { +static int parser_action_row727[] = { 1, -1, 1, 736 }; -static int parser_action_row726[] = { +static int parser_action_row728[] = { 1, -1, 1, 748 }; -static int parser_action_row727[] = { +static int parser_action_row729[] = { 1, -1, 1, 750 }; -static int parser_action_row728[] = { +static int parser_action_row730[] = { 1, -1, 1, 749 }; -static int parser_action_row729[] = { +static int parser_action_row731[] = { 1, -1, 1, 751 }; -static int parser_action_row730[] = { +static int parser_action_row732[] = { 1, -1, 1, 752 }; -static int parser_action_row731[] = { +static int parser_action_row733[] = { 1, -1, 1, 335 }; -static int parser_action_row732[] = { +static int parser_action_row734[] = { 3, -1, 1, 276, 56, 0, 207, - 66, 0, 837 + 66, 0, 839 }; -static int parser_action_row733[] = { +static int parser_action_row735[] = { 1, -1, 1, 337 }; -static int parser_action_row734[] = { +static int parser_action_row736[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row735[] = { +static int parser_action_row737[] = { 2, -1, 1, 331, - 58, 0, 839 + 58, 0, 841 }; -static int parser_action_row736[] = { +static int parser_action_row738[] = { 3, - -1, 3, 735, - 44, 0, 326, + -1, 3, 737, + 44, 0, 327, 85, 0, 219 }; -static int parser_action_row737[] = { +static int parser_action_row739[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row738[] = { +static int parser_action_row740[] = { 1, -1, 1, 336 }; -static int parser_action_row739[] = { +static int parser_action_row741[] = { 3, - -1, 3, 738, - 50, 0, 346, - 83, 0, 347 + -1, 3, 740, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row740[] = { +static int parser_action_row742[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row741[] = { +static int parser_action_row743[] = { 1, -1, 1, 302 }; -static int parser_action_row742[] = { +static int parser_action_row744[] = { 22, -1, 1, 362, 12, 0, 153, @@ -8573,83 +8585,83 @@ static int parser_action_row742[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row743[] = { +static int parser_action_row745[] = { 21, -1, 1, 362, - 12, 0, 845, - 25, 0, 846, - 34, 0, 847, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 25, 0, 848, + 34, 0, 849, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row744[] = { +static int parser_action_row746[] = { 1, -1, 1, 847 }; -static int parser_action_row745[] = { +static int parser_action_row747[] = { 1, -1, 1, 18 }; -static int parser_action_row746[] = { +static int parser_action_row748[] = { 3, - -1, 3, 745, + -1, 3, 747, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row747[] = { +static int parser_action_row749[] = { 1, -1, 1, 115 }; -static int parser_action_row748[] = { +static int parser_action_row750[] = { 2, -1, 1, 122, - 84, 0, 875 + 84, 0, 877 }; -static int parser_action_row749[] = { +static int parser_action_row751[] = { 3, - -1, 3, 748, - 50, 0, 346, - 83, 0, 347 + -1, 3, 750, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row750[] = { +static int parser_action_row752[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row751[] = { +static int parser_action_row753[] = { 9, - -1, 3, 750, + -1, 3, 752, 0, 0, 83, 1, 0, 84, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 19, 0, 880, - 20, 0, 881, - 84, 0, 343 + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 19, 0, 882, + 20, 0, 883, + 84, 0, 344 }; -static int parser_action_row752[] = { +static int parser_action_row754[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -8679,32 +8691,32 @@ static int parser_action_row752[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row753[] = { +static int parser_action_row755[] = { 2, - -1, 3, 752, - 15, 0, 885 + -1, 3, 754, + 15, 0, 887 }; -static int parser_action_row754[] = { +static int parser_action_row756[] = { 3, - -1, 3, 753, + -1, 3, 755, 31, 0, 35, 96, 0, 57 }; -static int parser_action_row755[] = { +static int parser_action_row757[] = { 1, -1, 1, 388 }; -static int parser_action_row756[] = { +static int parser_action_row758[] = { 1, -1, 1, 118 }; -static int parser_action_row757[] = { +static int parser_action_row759[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row758[] = { +static int parser_action_row760[] = { 5, -1, 1, 380, 0, 0, 1, @@ -8712,33 +8724,33 @@ static int parser_action_row758[] = { 31, 0, 35, 96, 0, 57 }; -static int parser_action_row759[] = { +static int parser_action_row761[] = { 1, -1, 1, 368 }; -static int parser_action_row760[] = { +static int parser_action_row762[] = { 2, -1, 1, 370, 60, 0, 192 }; -static int parser_action_row761[] = { +static int parser_action_row763[] = { 2, - -1, 3, 760, - 83, 0, 897 + -1, 3, 762, + 83, 0, 899 }; -static int parser_action_row762[] = { +static int parser_action_row764[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row763[] = { +static int parser_action_row765[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row764[] = { +static int parser_action_row766[] = { 22, -1, 1, 362, 12, 0, 153, @@ -8763,7 +8775,7 @@ static int parser_action_row764[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row765[] = { +static int parser_action_row767[] = { 22, -1, 1, 362, 12, 0, 153, @@ -8788,7 +8800,7 @@ static int parser_action_row765[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row766[] = { +static int parser_action_row768[] = { 22, -1, 1, 362, 12, 0, 153, @@ -8813,7 +8825,7 @@ static int parser_action_row766[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row767[] = { +static int parser_action_row769[] = { 22, -1, 1, 362, 12, 0, 153, @@ -8838,15 +8850,15 @@ static int parser_action_row767[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row768[] = { +static int parser_action_row770[] = { 1, -1, 1, 198 }; -static int parser_action_row769[] = { +static int parser_action_row771[] = { 1, -1, 1, 200 }; -static int parser_action_row770[] = { +static int parser_action_row772[] = { 23, -1, 1, 348, 12, 0, 108, @@ -8860,7 +8872,7 @@ static int parser_action_row770[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -8872,27 +8884,27 @@ static int parser_action_row770[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row771[] = { +static int parser_action_row773[] = { 1, -1, 1, 345 }; -static int parser_action_row772[] = { +static int parser_action_row774[] = { 5, - -1, 3, 771, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 84, 0, 343 + -1, 3, 773, + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 84, 0, 344 }; -static int parser_action_row773[] = { +static int parser_action_row775[] = { 1, -1, 1, 841 }; -static int parser_action_row774[] = { +static int parser_action_row776[] = { 1, -1, 1, 88 }; -static int parser_action_row775[] = { +static int parser_action_row777[] = { 36, -1, 1, 362, 0, 0, 83, @@ -8905,10 +8917,10 @@ static int parser_action_row775[] = { 29, 0, 33, 30, 0, 34, 34, 0, 110, - 36, 0, 906, - 37, 0, 907, - 38, 0, 908, - 39, 0, 909, + 36, 0, 908, + 37, 0, 909, + 38, 0, 910, + 39, 0, 911, 40, 0, 40, 41, 0, 111, 43, 0, 112, @@ -8916,13 +8928,13 @@ static int parser_action_row775[] = { 46, 0, 114, 47, 0, 115, 48, 0, 116, - 50, 0, 346, + 50, 0, 347, 51, 0, 117, - 53, 0, 910, - 54, 0, 911, + 53, 0, 912, + 54, 0, 913, 68, 0, 119, 82, 0, 183, - 83, 0, 721, + 83, 0, 723, 84, 0, 50, 86, 0, 120, 87, 0, 121, @@ -8931,11 +8943,11 @@ static int parser_action_row775[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row776[] = { +static int parser_action_row778[] = { 1, -1, 1, 843 }; -static int parser_action_row777[] = { +static int parser_action_row779[] = { 22, -1, 1, 362, 12, 0, 153, @@ -8960,48 +8972,48 @@ static int parser_action_row777[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row778[] = { +static int parser_action_row780[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row779[] = { +static int parser_action_row781[] = { 3, -1, 1, 531, 56, 1, 533, 66, 1, 533 }; -static int parser_action_row780[] = { +static int parser_action_row782[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row781[] = { +static int parser_action_row783[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row782[] = { +static int parser_action_row784[] = { 1, -1, 1, 210 }; -static int parser_action_row783[] = { +static int parser_action_row785[] = { 2, -1, 1, 197, 27, 1, 648 }; -static int parser_action_row784[] = { +static int parser_action_row786[] = { 3, -1, 1, 165, 27, 1, 623, 52, 1, 731 }; -static int parser_action_row785[] = { +static int parser_action_row787[] = { 30, -1, 1, 362, - 9, 0, 933, + 9, 0, 935, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -9031,26 +9043,26 @@ static int parser_action_row785[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row786[] = { +static int parser_action_row788[] = { 1, -1, 1, 672 }; -static int parser_action_row787[] = { +static int parser_action_row789[] = { 1, -1, 1, 624 }; -static int parser_action_row788[] = { +static int parser_action_row790[] = { 2, - -1, 3, 787, + -1, 3, 789, 52, 0, 172 }; -static int parser_action_row789[] = { +static int parser_action_row791[] = { 3, -1, 1, 162, 59, 0, 290, 82, 0, 183 }; -static int parser_action_row790[] = { +static int parser_action_row792[] = { 22, -1, 1, 362, 12, 0, 153, @@ -9075,11 +9087,11 @@ static int parser_action_row790[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row791[] = { +static int parser_action_row793[] = { 1, -1, 1, 230 }; -static int parser_action_row792[] = { +static int parser_action_row794[] = { 22, -1, 1, 362, 12, 0, 153, @@ -9104,26 +9116,26 @@ static int parser_action_row792[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row793[] = { +static int parser_action_row795[] = { 1, -1, 1, 675 }; -static int parser_action_row794[] = { +static int parser_action_row796[] = { 2, - -1, 3, 793, + -1, 3, 795, 52, 0, 172 }; -static int parser_action_row795[] = { +static int parser_action_row797[] = { 3, - -1, 3, 794, - 54, 0, 941, + -1, 3, 796, + 54, 0, 943, 84, 0, 297 }; -static int parser_action_row796[] = { +static int parser_action_row798[] = { 1, -1, 1, 628 }; -static int parser_action_row797[] = { +static int parser_action_row799[] = { 25, -1, 1, 184, 12, 0, 153, @@ -9151,11 +9163,11 @@ static int parser_action_row797[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row798[] = { +static int parser_action_row800[] = { 1, -1, 1, 636 }; -static int parser_action_row799[] = { +static int parser_action_row801[] = { 25, -1, 1, 179, 12, 0, 153, @@ -9183,11 +9195,11 @@ static int parser_action_row799[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row800[] = { +static int parser_action_row802[] = { 1, -1, 1, 631 }; -static int parser_action_row801[] = { +static int parser_action_row803[] = { 22, -1, 1, 362, 12, 0, 153, @@ -9212,31 +9224,31 @@ static int parser_action_row801[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row802[] = { +static int parser_action_row804[] = { 2, - -1, 3, 801, - 27, 0, 946 + -1, 3, 803, + 27, 0, 948 }; -static int parser_action_row803[] = { +static int parser_action_row805[] = { 3, - -1, 3, 802, - 50, 0, 346, - 83, 0, 347 + -1, 3, 804, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row804[] = { +static int parser_action_row806[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row805[] = { +static int parser_action_row807[] = { 4, -1, 1, 287, - 61, 0, 949, - 62, 0, 371, - 63, 0, 372 + 61, 0, 951, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row806[] = { +static int parser_action_row808[] = { 25, -1, 1, 348, 12, 0, 108, @@ -9264,26 +9276,26 @@ static int parser_action_row806[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row807[] = { +static int parser_action_row809[] = { 4, -1, 1, 281, - 61, 0, 952, - 62, 0, 371, - 63, 0, 372 + 61, 0, 954, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row808[] = { +static int parser_action_row810[] = { 4, -1, 1, 283, - 61, 0, 954, - 62, 0, 371, - 63, 0, 372 + 61, 0, 956, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row809[] = { +static int parser_action_row811[] = { 2, -1, 1, 194, 27, 1, 645 }; -static int parser_action_row810[] = { +static int parser_action_row812[] = { 23, -1, 1, 348, 12, 0, 108, @@ -9297,7 +9309,7 @@ static int parser_action_row810[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -9309,28 +9321,28 @@ static int parser_action_row810[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row811[] = { +static int parser_action_row813[] = { 3, - -1, 3, 810, - 9, 0, 665, - 27, 0, 670 + -1, 3, 812, + 9, 0, 667, + 27, 0, 672 }; -static int parser_action_row812[] = { +static int parser_action_row814[] = { 3, - -1, 3, 811, + -1, 3, 813, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row813[] = { +static int parser_action_row815[] = { 1, -1, 1, 229 }; -static int parser_action_row814[] = { +static int parser_action_row816[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -9360,7 +9372,7 @@ static int parser_action_row814[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row815[] = { +static int parser_action_row817[] = { 23, -1, 1, 348, 12, 0, 108, @@ -9374,7 +9386,7 @@ static int parser_action_row815[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -9386,33 +9398,33 @@ static int parser_action_row815[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row816[] = { +static int parser_action_row818[] = { 3, -1, 1, 360, - 12, 0, 961, - 84, 0, 389 + 12, 0, 963, + 84, 0, 390 }; -static int parser_action_row817[] = { +static int parser_action_row819[] = { 1, -1, 1, 234 }; -static int parser_action_row818[] = { +static int parser_action_row820[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row819[] = { +static int parser_action_row821[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row820[] = { +static int parser_action_row822[] = { 1, -1, 1, 354 }; -static int parser_action_row821[] = { +static int parser_action_row823[] = { 22, -1, 1, 362, 12, 0, 153, @@ -9437,62 +9449,62 @@ static int parser_action_row821[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row822[] = { +static int parser_action_row824[] = { 3, -1, 1, 278, 56, 1, 280, 66, 1, 280 }; -static int parser_action_row823[] = { +static int parser_action_row825[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row824[] = { +static int parser_action_row826[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row825[] = { +static int parser_action_row827[] = { 1, -1, 1, 834 }; -static int parser_action_row826[] = { +static int parser_action_row828[] = { 2, -1, 1, 158, - 58, 0, 823 + 58, 0, 825 }; -static int parser_action_row827[] = { +static int parser_action_row829[] = { 2, - -1, 3, 826, - 57, 0, 968 + -1, 3, 828, + 57, 0, 970 }; -static int parser_action_row828[] = { +static int parser_action_row830[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row829[] = { +static int parser_action_row831[] = { 1, -1, 1, 288 }; -static int parser_action_row830[] = { +static int parser_action_row832[] = { 2, - -1, 3, 829, - 84, 0, 389 + -1, 3, 831, + 84, 0, 390 }; -static int parser_action_row831[] = { +static int parser_action_row833[] = { 1, -1, 1, 316 }; -static int parser_action_row832[] = { +static int parser_action_row834[] = { 1, -1, 1, 738 }; -static int parser_action_row833[] = { +static int parser_action_row835[] = { 24, -1, 1, 745, 12, 0, 153, @@ -9519,11 +9531,11 @@ static int parser_action_row833[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row834[] = { +static int parser_action_row836[] = { 1, -1, 1, 746 }; -static int parser_action_row835[] = { +static int parser_action_row837[] = { 24, -1, 1, 740, 12, 0, 153, @@ -9550,316 +9562,316 @@ static int parser_action_row835[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row836[] = { +static int parser_action_row838[] = { 1, -1, 1, 741 }; -static int parser_action_row837[] = { +static int parser_action_row839[] = { 3, - -1, 3, 836, - 50, 0, 346, - 83, 0, 347 + -1, 3, 838, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row838[] = { +static int parser_action_row840[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row839[] = { +static int parser_action_row841[] = { 2, - -1, 3, 838, - 55, 0, 974 + -1, 3, 840, + 55, 0, 976 }; -static int parser_action_row840[] = { +static int parser_action_row842[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row841[] = { +static int parser_action_row843[] = { 1, -1, 1, 844 }; -static int parser_action_row842[] = { +static int parser_action_row844[] = { 2, -1, 1, 332, - 58, 0, 839 + 58, 0, 841 }; -static int parser_action_row843[] = { +static int parser_action_row845[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row844[] = { +static int parser_action_row846[] = { 2, - -1, 3, 843, - 57, 0, 978 + -1, 3, 845, + 57, 0, 980 }; -static int parser_action_row845[] = { +static int parser_action_row847[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row846[] = { +static int parser_action_row848[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row847[] = { +static int parser_action_row849[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row848[] = { +static int parser_action_row850[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row849[] = { +static int parser_action_row851[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row850[] = { +static int parser_action_row852[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row851[] = { +static int parser_action_row853[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row852[] = { +static int parser_action_row854[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row853[] = { +static int parser_action_row855[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row854[] = { +static int parser_action_row856[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row855[] = { +static int parser_action_row857[] = { 16, -1, 1, 362, - 12, 0, 845, - 41, 0, 989, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 54, 0, 855, + 12, 0, 847, + 41, 0, 991, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 54, 0, 857, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row856[] = { +static int parser_action_row858[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row857[] = { +static int parser_action_row859[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row858[] = { +static int parser_action_row860[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row859[] = { +static int parser_action_row861[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row860[] = { +static int parser_action_row862[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row861[] = { +static int parser_action_row863[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row862[] = { +static int parser_action_row864[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row863[] = { +static int parser_action_row865[] = { 1, -1, 1, 448 }; -static int parser_action_row864[] = { +static int parser_action_row866[] = { 3, - -1, 3, 863, - 44, 0, 999, - 85, 0, 1000 + -1, 3, 865, + 44, 0, 1001, + 85, 0, 1002 }; -static int parser_action_row865[] = { +static int parser_action_row867[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row866[] = { +static int parser_action_row868[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row867[] = { +static int parser_action_row869[] = { 4, -1, 1, 397, - 32, 0, 1003, - 33, 0, 1004, - 35, 0, 1005 + 32, 0, 1005, + 33, 0, 1006, + 35, 0, 1007 }; -static int parser_action_row868[] = { +static int parser_action_row870[] = { 1, -1, 1, 399 }; -static int parser_action_row869[] = { +static int parser_action_row871[] = { 3, -1, 1, 404, - 76, 0, 1006, - 79, 0, 1007 + 76, 0, 1008, + 79, 0, 1009 }; -static int parser_action_row870[] = { +static int parser_action_row872[] = { 11, -1, 1, 406, - 42, 0, 1008, - 67, 0, 1009, - 68, 0, 1010, - 72, 0, 1011, - 73, 0, 1012, - 74, 0, 1013, - 75, 0, 1014, - 77, 0, 1015, - 78, 0, 1016, - 80, 0, 1017 + 42, 0, 1010, + 67, 0, 1011, + 68, 0, 1012, + 72, 0, 1013, + 73, 0, 1014, + 74, 0, 1015, + 75, 0, 1016, + 77, 0, 1017, + 78, 0, 1018, + 80, 0, 1019 }; -static int parser_action_row871[] = { +static int parser_action_row873[] = { 4, -1, 1, 417, - 69, 0, 1018, - 70, 0, 1019, - 71, 0, 1020 + 69, 0, 1020, + 70, 0, 1021, + 71, 0, 1022 }; -static int parser_action_row872[] = { +static int parser_action_row874[] = { 1, -1, 1, 420 }; -static int parser_action_row873[] = { +static int parser_action_row875[] = { 1, -1, 1, 424 }; -static int parser_action_row874[] = { +static int parser_action_row876[] = { 2, -1, 1, 427, - 66, 0, 1021 + 66, 0, 1023 }; -static int parser_action_row875[] = { +static int parser_action_row877[] = { 1, -1, 1, 17 }; -static int parser_action_row876[] = { +static int parser_action_row878[] = { 3, -1, 1, 318, - 59, 0, 624, + 59, 0, 626, 82, 0, 183 }; -static int parser_action_row877[] = { +static int parser_action_row879[] = { 2, - -1, 3, 876, - 55, 0, 1025 + -1, 3, 878, + 55, 0, 1027 }; -static int parser_action_row878[] = { +static int parser_action_row880[] = { 4, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 58, 0, 1026 + 58, 0, 1028 }; -static int parser_action_row879[] = { +static int parser_action_row881[] = { 1, -1, 1, 160 }; -static int parser_action_row880[] = { +static int parser_action_row882[] = { 20, - -1, 3, 879, - 44, 0, 1030, - 50, 0, 346, - 56, 0, 488, - 67, 0, 489, - 68, 0, 490, - 69, 0, 491, - 70, 0, 492, - 71, 0, 493, - 72, 0, 494, - 73, 0, 495, - 74, 0, 496, - 75, 0, 497, - 76, 0, 498, - 77, 0, 499, - 78, 0, 500, - 79, 0, 501, - 80, 0, 502, - 83, 0, 347, - 84, 0, 503 + -1, 3, 881, + 44, 0, 1032, + 50, 0, 347, + 56, 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, + 79, 0, 503, + 80, 0, 504, + 83, 0, 348, + 84, 0, 505 }; -static int parser_action_row881[] = { +static int parser_action_row883[] = { 1, -1, 1, 389 }; -static int parser_action_row882[] = { +static int parser_action_row884[] = { 2, -1, 1, 145, - 89, 0, 1036 + 89, 0, 1038 }; -static int parser_action_row883[] = { +static int parser_action_row885[] = { 2, -1, 1, 392, 15, 1, 90 }; -static int parser_action_row884[] = { +static int parser_action_row886[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row885[] = { +static int parser_action_row887[] = { 2, -1, 1, 373, - 9, 0, 1039 + 9, 0, 1041 }; -static int parser_action_row886[] = { +static int parser_action_row888[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -9889,61 +9901,61 @@ static int parser_action_row886[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row887[] = { +static int parser_action_row889[] = { 1, -1, 1, 391 }; -static int parser_action_row888[] = { +static int parser_action_row890[] = { 2, - -1, 3, 887, - 83, 0, 1042 + -1, 3, 889, + 83, 0, 1044 }; -static int parser_action_row889[] = { +static int parser_action_row891[] = { 1, -1, 1, 824 }; -static int parser_action_row890[] = { +static int parser_action_row892[] = { 1, -1, 1, 826 }; -static int parser_action_row891[] = { +static int parser_action_row893[] = { 3, - -1, 3, 890, + -1, 3, 892, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row892[] = { +static int parser_action_row894[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row893[] = { +static int parser_action_row895[] = { 6, -1, 1, 42, - 4, 0, 1048, - 9, 0, 1049, + 4, 0, 1050, + 9, 0, 1051, 13, 0, 28, - 44, 0, 1050, - 84, 0, 1051 + 44, 0, 1052, + 84, 0, 1053 }; -static int parser_action_row894[] = { +static int parser_action_row896[] = { 1, -1, 1, 854 }; -static int parser_action_row895[] = { +static int parser_action_row897[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row896[] = { +static int parser_action_row898[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row897[] = { +static int parser_action_row899[] = { 5, -1, 1, 380, 0, 0, 1, @@ -9951,47 +9963,47 @@ static int parser_action_row897[] = { 31, 0, 35, 96, 0, 57 }; -static int parser_action_row898[] = { +static int parser_action_row900[] = { 1, -1, 1, 369 }; -static int parser_action_row899[] = { +static int parser_action_row901[] = { 2, - -1, 3, 898, - 48, 0, 1066 + -1, 3, 900, + 48, 0, 1068 }; -static int parser_action_row900[] = { +static int parser_action_row902[] = { 4, - -1, 3, 899, - 34, 0, 1067, - 50, 0, 346, - 83, 0, 347 + -1, 3, 901, + 34, 0, 1069, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row901[] = { +static int parser_action_row903[] = { 1, -1, 1, 211 }; -static int parser_action_row902[] = { +static int parser_action_row904[] = { 1, -1, 1, 216 }; -static int parser_action_row903[] = { +static int parser_action_row905[] = { 1, -1, 1, 213 }; -static int parser_action_row904[] = { +static int parser_action_row906[] = { 1, -1, 1, 218 }; -static int parser_action_row905[] = { +static int parser_action_row907[] = { 1, -1, 1, 199 }; -static int parser_action_row906[] = { +static int parser_action_row908[] = { 1, -1, 1, 330 }; -static int parser_action_row907[] = { +static int parser_action_row909[] = { 24, -1, 1, 756, 12, 0, 153, @@ -10018,7 +10030,7 @@ static int parser_action_row907[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row908[] = { +static int parser_action_row910[] = { 25, -1, 1, 763, 12, 0, 153, @@ -10046,7 +10058,7 @@ static int parser_action_row908[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row909[] = { +static int parser_action_row911[] = { 25, -1, 1, 758, 12, 0, 153, @@ -10074,215 +10086,215 @@ static int parser_action_row909[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row910[] = { +static int parser_action_row912[] = { 1, -1, 1, 762 }; -static int parser_action_row911[] = { +static int parser_action_row913[] = { 2, - -1, 3, 910, - 11, 0, 1074 + -1, 3, 912, + 11, 0, 1076 }; -static int parser_action_row912[] = { +static int parser_action_row914[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row913[] = { +static int parser_action_row915[] = { 1, -1, 1, 562 }; -static int parser_action_row914[] = { +static int parser_action_row916[] = { 1, -1, 1, 754 }; -static int parser_action_row915[] = { +static int parser_action_row917[] = { 1, -1, 1, 767 }; -static int parser_action_row916[] = { +static int parser_action_row918[] = { 1, -1, 1, 769 }; -static int parser_action_row917[] = { +static int parser_action_row919[] = { 1, -1, 1, 768 }; -static int parser_action_row918[] = { +static int parser_action_row920[] = { 1, -1, 1, 770 }; -static int parser_action_row919[] = { +static int parser_action_row921[] = { 1, -1, 1, 771 }; -static int parser_action_row920[] = { +static int parser_action_row922[] = { 3, - -1, 3, 919, + -1, 3, 921, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row921[] = { +static int parser_action_row923[] = { 3, - -1, 3, 920, + -1, 3, 922, 44, 0, 262, - 85, 0, 1077 + 85, 0, 1079 }; -static int parser_action_row922[] = { +static int parser_action_row924[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row923[] = { +static int parser_action_row925[] = { 1, -1, 1, 325 }; -static int parser_action_row924[] = { +static int parser_action_row926[] = { 1, -1, 1, 755 }; -static int parser_action_row925[] = { +static int parser_action_row927[] = { 1, -1, 1, 563 }; -static int parser_action_row926[] = { +static int parser_action_row928[] = { 3, -1, 1, 529, 56, 0, 207, - 66, 0, 1079 + 66, 0, 1081 }; -static int parser_action_row927[] = { +static int parser_action_row929[] = { 3, - -1, 3, 926, + -1, 3, 928, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row928[] = { +static int parser_action_row930[] = { 2, -1, 1, 560, - 58, 0, 839 + 58, 0, 841 }; -static int parser_action_row929[] = { +static int parser_action_row931[] = { 1, -1, 1, 564 }; -static int parser_action_row930[] = { +static int parser_action_row932[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row931[] = { +static int parser_action_row933[] = { 1, -1, 1, 541 }; -static int parser_action_row932[] = { +static int parser_action_row934[] = { 2, - -1, 3, 931, - 48, 0, 1084 + -1, 3, 933, + 48, 0, 1086 }; -static int parser_action_row933[] = { +static int parser_action_row935[] = { 4, - -1, 3, 932, - 34, 0, 1085, - 50, 0, 346, - 83, 0, 347 + -1, 3, 934, + 34, 0, 1087, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row934[] = { +static int parser_action_row936[] = { 3, -1, 1, 164, 27, 1, 622, 52, 1, 730 }; -static int parser_action_row935[] = { +static int parser_action_row937[] = { 3, -1, 1, 163, 27, 1, 621, 52, 1, 729 }; -static int parser_action_row936[] = { +static int parser_action_row938[] = { 2, -1, 1, 223, 27, 1, 671 }; -static int parser_action_row937[] = { +static int parser_action_row939[] = { 3, -1, 1, 207, 27, 1, 657, - 61, 0, 1087 + 61, 0, 1089 }; -static int parser_action_row938[] = { +static int parser_action_row940[] = { 2, -1, 1, 162, 59, 0, 290 }; -static int parser_action_row939[] = { +static int parser_action_row941[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row940[] = { +static int parser_action_row942[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row941[] = { +static int parser_action_row943[] = { 2, -1, 1, 232, 27, 1, 674 }; -static int parser_action_row942[] = { +static int parser_action_row944[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row943[] = { +static int parser_action_row945[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row944[] = { +static int parser_action_row946[] = { 1, -1, 1, 637 }; -static int parser_action_row945[] = { +static int parser_action_row947[] = { 1, -1, 1, 632 }; -static int parser_action_row946[] = { +static int parser_action_row948[] = { 2, - -1, 3, 945, - 27, 0, 1093 + -1, 3, 947, + 27, 0, 1095 }; -static int parser_action_row947[] = { +static int parser_action_row949[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 1094, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 1096, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -10294,20 +10306,20 @@ static int parser_action_row947[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row948[] = { +static int parser_action_row950[] = { 2, - -1, 3, 947, - 59, 0, 1097 + -1, 3, 949, + 59, 0, 1099 }; -static int parser_action_row949[] = { +static int parser_action_row951[] = { 5, -1, 1, 362, - 12, 0, 1098, - 49, 0, 508, + 12, 0, 1100, + 49, 0, 510, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row950[] = { +static int parser_action_row952[] = { 22, -1, 1, 362, 12, 0, 153, @@ -10332,7 +10344,7 @@ static int parser_action_row950[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row951[] = { +static int parser_action_row953[] = { 22, -1, 1, 362, 12, 0, 153, @@ -10357,12 +10369,12 @@ static int parser_action_row951[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row952[] = { +static int parser_action_row954[] = { 2, -1, 1, 195, 27, 1, 646 }; -static int parser_action_row953[] = { +static int parser_action_row955[] = { 22, -1, 1, 362, 12, 0, 153, @@ -10387,7 +10399,7 @@ static int parser_action_row953[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row954[] = { +static int parser_action_row956[] = { 22, -1, 1, 362, 12, 0, 153, @@ -10412,7 +10424,7 @@ static int parser_action_row954[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row955[] = { +static int parser_action_row957[] = { 22, -1, 1, 362, 12, 0, 153, @@ -10437,7 +10449,7 @@ static int parser_action_row955[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row956[] = { +static int parser_action_row958[] = { 22, -1, 1, 362, 12, 0, 153, @@ -10462,31 +10474,31 @@ static int parser_action_row956[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row957[] = { +static int parser_action_row959[] = { 2, -1, 1, 201, 27, 1, 652 }; -static int parser_action_row958[] = { +static int parser_action_row960[] = { 1, -1, 1, 227 }; -static int parser_action_row959[] = { +static int parser_action_row961[] = { 3, - -1, 3, 958, + -1, 3, 960, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row960[] = { +static int parser_action_row962[] = { 1, -1, 1, 225 }; -static int parser_action_row961[] = { +static int parser_action_row963[] = { 2, -1, 1, 203, 27, 1, 654 }; -static int parser_action_row962[] = { +static int parser_action_row964[] = { 23, -1, 1, 348, 12, 0, 108, @@ -10500,7 +10512,7 @@ static int parser_action_row962[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -10512,74 +10524,74 @@ static int parser_action_row962[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row963[] = { +static int parser_action_row965[] = { 2, - -1, 3, 962, - 31, 0, 1110 + -1, 3, 964, + 31, 0, 1112 }; -static int parser_action_row964[] = { +static int parser_action_row966[] = { 2, - -1, 3, 963, - 15, 0, 1111 + -1, 3, 965, + 15, 0, 1113 }; -static int parser_action_row965[] = { +static int parser_action_row967[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row966[] = { +static int parser_action_row968[] = { 2, - -1, 3, 965, - 57, 0, 1113 + -1, 3, 967, + 57, 0, 1115 }; -static int parser_action_row967[] = { +static int parser_action_row969[] = { 3, - -1, 3, 966, - 50, 0, 346, - 83, 0, 347 + -1, 3, 968, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row968[] = { +static int parser_action_row970[] = { 1, -1, 1, 835 }; -static int parser_action_row969[] = { +static int parser_action_row971[] = { 2, -1, 1, 558, - 82, 0, 472 + 82, 0, 474 }; -static int parser_action_row970[] = { +static int parser_action_row972[] = { 2, - -1, 3, 969, - 55, 0, 1116 + -1, 3, 971, + 55, 0, 1118 }; -static int parser_action_row971[] = { +static int parser_action_row973[] = { 1, -1, 1, 747 }; -static int parser_action_row972[] = { +static int parser_action_row974[] = { 1, -1, 1, 742 }; -static int parser_action_row973[] = { +static int parser_action_row975[] = { 2, - -1, 3, 972, - 59, 0, 1117 + -1, 3, 974, + 59, 0, 1119 }; -static int parser_action_row974[] = { +static int parser_action_row976[] = { 5, -1, 1, 362, - 12, 0, 595, - 49, 0, 508, + 12, 0, 597, + 49, 0, 510, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row975[] = { +static int parser_action_row977[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row976[] = { +static int parser_action_row978[] = { 35, -1, 1, 362, 12, 0, 153, @@ -10590,10 +10602,10 @@ static int parser_action_row976[] = { 29, 0, 33, 30, 0, 34, 34, 0, 155, - 36, 0, 716, - 37, 0, 717, - 38, 0, 718, - 39, 0, 719, + 36, 0, 718, + 37, 0, 719, + 38, 0, 720, + 39, 0, 721, 40, 0, 40, 41, 0, 156, 43, 0, 157, @@ -10601,14 +10613,14 @@ static int parser_action_row976[] = { 46, 0, 43, 47, 0, 44, 48, 0, 45, - 50, 0, 346, + 50, 0, 347, 51, 0, 158, - 53, 0, 720, + 53, 0, 722, 54, 0, 47, 56, 0, 48, 68, 0, 159, 82, 0, 183, - 83, 0, 721, + 83, 0, 723, 84, 0, 50, 86, 0, 51, 87, 0, 52, @@ -10617,29 +10629,29 @@ static int parser_action_row976[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row977[] = { +static int parser_action_row979[] = { 1, -1, 1, 845 }; -static int parser_action_row978[] = { +static int parser_action_row980[] = { 2, - -1, 3, 977, - 57, 0, 1121 + -1, 3, 979, + 57, 0, 1123 }; -static int parser_action_row979[] = { +static int parser_action_row981[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row980[] = { +static int parser_action_row982[] = { 1, -1, 1, 352 }; -static int parser_action_row981[] = { +static int parser_action_row983[] = { 1, -1, 1, 437 }; -static int parser_action_row982[] = { +static int parser_action_row984[] = { 22, -1, 1, 362, 12, 0, 153, @@ -10664,91 +10676,91 @@ static int parser_action_row982[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row983[] = { +static int parser_action_row985[] = { 20, -1, 1, 362, - 12, 0, 845, - 34, 0, 847, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 34, 0, 849, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row984[] = { +static int parser_action_row986[] = { 3, - -1, 3, 983, - 50, 0, 1125, - 83, 0, 1126 + -1, 3, 985, + 50, 0, 1127, + 83, 0, 1128 }; -static int parser_action_row985[] = { +static int parser_action_row987[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row986[] = { +static int parser_action_row988[] = { 1, -1, 1, 439 }; -static int parser_action_row987[] = { +static int parser_action_row989[] = { 1, -1, 1, 440 }; -static int parser_action_row988[] = { +static int parser_action_row990[] = { 1, -1, 1, 441 }; -static int parser_action_row989[] = { +static int parser_action_row991[] = { 1, -1, 1, 442 }; -static int parser_action_row990[] = { +static int parser_action_row992[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row991[] = { +static int parser_action_row993[] = { 3, - -1, 3, 990, - 44, 0, 999, - 85, 0, 1130 + -1, 3, 992, + 44, 0, 1001, + 85, 0, 1132 }; -static int parser_action_row992[] = { +static int parser_action_row994[] = { 2, - -1, 3, 991, - 66, 0, 1131 + -1, 3, 993, + 66, 0, 1133 }; -static int parser_action_row993[] = { +static int parser_action_row995[] = { 22, -1, 1, 362, 12, 0, 153, @@ -10773,79 +10785,66 @@ static int parser_action_row993[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row994[] = { +static int parser_action_row996[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row995[] = { +static int parser_action_row997[] = { 1, -1, 1, 443 }; -static int parser_action_row996[] = { +static int parser_action_row998[] = { 1, -1, 1, 444 }; -static int parser_action_row997[] = { +static int parser_action_row999[] = { 1, -1, 1, 445 }; -static int parser_action_row998[] = { +static int parser_action_row1000[] = { 1, -1, 1, 447 }; -static int parser_action_row999[] = { +static int parser_action_row1001[] = { 1, -1, 1, 446 }; -static int parser_action_row1000[] = { +static int parser_action_row1002[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row1001[] = { +static int parser_action_row1003[] = { 1, -1, 1, 432 }; -static int parser_action_row1002[] = { +static int parser_action_row1004[] = { 1, -1, 1, 434 }; -static int parser_action_row1003[] = { - 3, - -1, 3, 1002, - 56, 0, 1135, - 57, 0, 1136 -}; -static int parser_action_row1004[] = { - 3, - -1, 1, 380, - 0, 0, 1, - 1, 0, 2 -}; static int parser_action_row1005[] = { - 4, - -1, 1, 380, - 0, 0, 1, - 1, 0, 2, - 27, 0, 1138 + 3, + -1, 3, 1004, + 56, 0, 1137, + 57, 0, 1138 }; static int parser_action_row1006[] = { 3, @@ -10854,10 +10853,11 @@ static int parser_action_row1006[] = { 1, 0, 2 }; static int parser_action_row1007[] = { - 3, + 4, -1, 1, 380, 0, 0, 1, - 1, 0, 2 + 1, 0, 2, + 27, 0, 1140 }; static int parser_action_row1008[] = { 3, @@ -10950,172 +10950,184 @@ static int parser_action_row1022[] = { 1, 0, 2 }; static int parser_action_row1023[] = { + 3, + -1, 1, 380, + 0, 0, 1, + 1, 0, 2 +}; +static int parser_action_row1024[] = { + 3, + -1, 1, 380, + 0, 0, 1, + 1, 0, 2 +}; +static int parser_action_row1025[] = { 2, -1, 1, 125, - 64, 0, 1157 + 64, 0, 1159 }; -static int parser_action_row1024[] = { +static int parser_action_row1026[] = { 2, -1, 1, 317, - 59, 0, 624 + 59, 0, 626 }; -static int parser_action_row1025[] = { +static int parser_action_row1027[] = { 1, -1, 1, 124 }; -static int parser_action_row1026[] = { +static int parser_action_row1028[] = { 4, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 59, 0, 624 + 59, 0, 626 }; -static int parser_action_row1027[] = { +static int parser_action_row1029[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1028[] = { +static int parser_action_row1030[] = { 1, -1, 1, 830 }; -static int parser_action_row1029[] = { +static int parser_action_row1031[] = { 1, -1, 1, 120 }; -static int parser_action_row1030[] = { +static int parser_action_row1032[] = { 4, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 58, 0, 1026 + 58, 0, 1028 }; -static int parser_action_row1031[] = { +static int parser_action_row1033[] = { 1, -1, 1, 135 }; -static int parser_action_row1032[] = { +static int parser_action_row1034[] = { 1, -1, 1, 136 }; -static int parser_action_row1033[] = { +static int parser_action_row1035[] = { 2, -1, 1, 129, - 58, 0, 1164 + 58, 0, 1166 }; -static int parser_action_row1034[] = { +static int parser_action_row1036[] = { 1, -1, 1, 133 }; -static int parser_action_row1035[] = { +static int parser_action_row1037[] = { 1, -1, 1, 134 }; -static int parser_action_row1036[] = { +static int parser_action_row1038[] = { 2, -1, 1, 138, - 66, 0, 1167 + 66, 0, 1169 }; -static int parser_action_row1037[] = { +static int parser_action_row1039[] = { 1, -1, 1, 146 }; -static int parser_action_row1038[] = { +static int parser_action_row1040[] = { 2, -1, 1, 131, - 4, 0, 749 + 4, 0, 751 }; -static int parser_action_row1039[] = { +static int parser_action_row1041[] = { 2, -1, 1, 91, - 9, 0, 1169 + 9, 0, 1171 }; -static int parser_action_row1040[] = { +static int parser_action_row1042[] = { 1, -1, 1, 374 }; -static int parser_action_row1041[] = { +static int parser_action_row1043[] = { 1, -1, 1, 386 }; -static int parser_action_row1042[] = { +static int parser_action_row1044[] = { 2, -1, 1, 373, - 9, 0, 1039 + 9, 0, 1041 }; -static int parser_action_row1043[] = { +static int parser_action_row1045[] = { 3, -1, 1, 162, 59, 0, 290, 82, 0, 183 }; -static int parser_action_row1044[] = { +static int parser_action_row1046[] = { 4, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 58, 0, 1173 + 58, 0, 1175 }; -static int parser_action_row1045[] = { +static int parser_action_row1047[] = { 1, -1, 1, 56 }; -static int parser_action_row1046[] = { +static int parser_action_row1048[] = { 4, -1, 1, 42, - 9, 0, 1177, + 9, 0, 1179, 13, 0, 28, - 44, 0, 1050 + 44, 0, 1052 }; -static int parser_action_row1047[] = { +static int parser_action_row1049[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1048[] = { +static int parser_action_row1050[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1049[] = { +static int parser_action_row1051[] = { 1, -1, 1, 817 }; -static int parser_action_row1050[] = { +static int parser_action_row1052[] = { 1, -1, 1, 26 }; -static int parser_action_row1051[] = { +static int parser_action_row1053[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1052[] = { +static int parser_action_row1054[] = { 1, -1, 1, 816 }; -static int parser_action_row1053[] = { +static int parser_action_row1055[] = { 4, -1, 1, 94, 22, 0, 199, 23, 0, 200, 24, 0, 201 }; -static int parser_action_row1054[] = { +static int parser_action_row1056[] = { 2, -1, 1, 42, 13, 0, 28 }; -static int parser_action_row1055[] = { +static int parser_action_row1057[] = { 2, -1, 1, 42, 13, 0, 28 }; -static int parser_action_row1056[] = { +static int parser_action_row1058[] = { 36, -1, 1, 362, 0, 0, 83, @@ -11128,10 +11140,10 @@ static int parser_action_row1056[] = { 29, 0, 33, 30, 0, 34, 34, 0, 110, - 36, 0, 906, - 37, 0, 907, - 38, 0, 908, - 39, 0, 909, + 36, 0, 908, + 37, 0, 909, + 38, 0, 910, + 39, 0, 911, 40, 0, 40, 41, 0, 111, 43, 0, 112, @@ -11139,13 +11151,13 @@ static int parser_action_row1056[] = { 46, 0, 114, 47, 0, 115, 48, 0, 116, - 50, 0, 346, + 50, 0, 347, 51, 0, 117, - 53, 0, 910, - 54, 0, 1186, + 53, 0, 912, + 54, 0, 1188, 68, 0, 119, 82, 0, 183, - 83, 0, 721, + 83, 0, 723, 84, 0, 50, 86, 0, 120, 87, 0, 121, @@ -11154,85 +11166,85 @@ static int parser_action_row1056[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row1057[] = { +static int parser_action_row1059[] = { 1, -1, 1, 825 }; -static int parser_action_row1058[] = { +static int parser_action_row1060[] = { 4, -1, 1, 42, - 9, 0, 1190, + 9, 0, 1192, 13, 0, 28, - 44, 0, 1050 + 44, 0, 1052 }; -static int parser_action_row1059[] = { +static int parser_action_row1061[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1060[] = { +static int parser_action_row1062[] = { 1, -1, 1, 827 }; -static int parser_action_row1061[] = { +static int parser_action_row1063[] = { 3, -1, 1, 42, - 9, 0, 1192, + 9, 0, 1194, 13, 0, 28 }; -static int parser_action_row1062[] = { +static int parser_action_row1064[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1063[] = { +static int parser_action_row1065[] = { 6, -1, 1, 42, - 4, 0, 1048, - 9, 0, 1196, + 4, 0, 1050, + 9, 0, 1198, 13, 0, 28, - 44, 0, 1050, - 84, 0, 1051 + 44, 0, 1052, + 84, 0, 1053 }; -static int parser_action_row1064[] = { +static int parser_action_row1066[] = { 1, -1, 1, 855 }; -static int parser_action_row1065[] = { +static int parser_action_row1067[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1066[] = { +static int parser_action_row1068[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1067[] = { +static int parser_action_row1069[] = { 1, -1, 1, 305 }; -static int parser_action_row1068[] = { +static int parser_action_row1070[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1069[] = { +static int parser_action_row1071[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1070[] = { +static int parser_action_row1072[] = { 1, -1, 1, 757 }; -static int parser_action_row1071[] = { +static int parser_action_row1073[] = { 24, -1, 1, 764, 12, 0, 153, @@ -11259,11 +11271,11 @@ static int parser_action_row1071[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1072[] = { +static int parser_action_row1074[] = { 1, -1, 1, 765 }; -static int parser_action_row1073[] = { +static int parser_action_row1075[] = { 24, -1, 1, 759, 12, 0, 153, @@ -11290,17 +11302,17 @@ static int parser_action_row1073[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1074[] = { +static int parser_action_row1076[] = { 1, -1, 1, 760 }; -static int parser_action_row1075[] = { +static int parser_action_row1077[] = { 3, - -1, 3, 1074, - 50, 0, 346, - 83, 0, 347 + -1, 3, 1076, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row1076[] = { +static int parser_action_row1078[] = { 35, -1, 1, 362, 12, 0, 153, @@ -11311,10 +11323,10 @@ static int parser_action_row1076[] = { 29, 0, 33, 30, 0, 34, 34, 0, 155, - 36, 0, 716, - 37, 0, 717, - 38, 0, 718, - 39, 0, 719, + 36, 0, 718, + 37, 0, 719, + 38, 0, 720, + 39, 0, 721, 40, 0, 40, 41, 0, 156, 43, 0, 157, @@ -11322,14 +11334,14 @@ static int parser_action_row1076[] = { 46, 0, 43, 47, 0, 44, 48, 0, 45, - 50, 0, 346, + 50, 0, 347, 51, 0, 158, - 53, 0, 720, + 53, 0, 722, 54, 0, 47, 56, 0, 48, 68, 0, 159, 82, 0, 183, - 83, 0, 721, + 83, 0, 723, 84, 0, 50, 86, 0, 51, 87, 0, 52, @@ -11338,124 +11350,124 @@ static int parser_action_row1076[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1077[] = { +static int parser_action_row1079[] = { 1, -1, 1, 326 }; -static int parser_action_row1078[] = { +static int parser_action_row1080[] = { 4, -1, 1, 534, - 61, 0, 1206, - 62, 0, 371, - 63, 0, 372 + 61, 0, 1208, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row1079[] = { +static int parser_action_row1081[] = { 4, -1, 1, 536, - 61, 0, 1208, - 62, 0, 371, - 63, 0, 372 + 61, 0, 1210, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row1080[] = { +static int parser_action_row1082[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1081[] = { +static int parser_action_row1083[] = { 4, -1, 1, 540, - 61, 0, 1211, - 62, 0, 371, - 63, 0, 372 + 61, 0, 1213, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row1082[] = { +static int parser_action_row1084[] = { 1, -1, 1, 329 }; -static int parser_action_row1083[] = { +static int parser_action_row1085[] = { 2, -1, 1, 561, - 58, 0, 839 + 58, 0, 841 }; -static int parser_action_row1084[] = { +static int parser_action_row1086[] = { 2, - -1, 3, 1083, - 27, 0, 1213 + -1, 3, 1085, + 27, 0, 1215 }; -static int parser_action_row1085[] = { +static int parser_action_row1087[] = { 1, -1, 1, 554 }; -static int parser_action_row1086[] = { +static int parser_action_row1088[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1087[] = { +static int parser_action_row1089[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1088[] = { +static int parser_action_row1090[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1089[] = { +static int parser_action_row1091[] = { 3, -1, 1, 208, 27, 1, 658, - 61, 0, 1217 + 61, 0, 1219 }; -static int parser_action_row1090[] = { +static int parser_action_row1092[] = { 2, - -1, 3, 1089, - 26, 0, 1218 + -1, 3, 1091, + 26, 0, 1220 }; -static int parser_action_row1091[] = { +static int parser_action_row1093[] = { 2, - -1, 3, 1090, - 15, 0, 1219 + -1, 3, 1092, + 15, 0, 1221 }; -static int parser_action_row1092[] = { +static int parser_action_row1094[] = { 2, - -1, 3, 1091, + -1, 3, 1093, 84, 0, 297 }; -static int parser_action_row1093[] = { +static int parser_action_row1095[] = { 3, - -1, 3, 1092, - 31, 0, 1221, - 58, 0, 572 + -1, 3, 1094, + 31, 0, 1223, + 58, 0, 574 }; -static int parser_action_row1094[] = { +static int parser_action_row1096[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 1094, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 1096, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -11467,15 +11479,15 @@ static int parser_action_row1094[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1095[] = { +static int parser_action_row1097[] = { 2, -1, 1, 165, 27, 1, 623 }; -static int parser_action_row1096[] = { +static int parser_action_row1098[] = { 30, -1, 1, 362, - 9, 0, 1223, + 9, 0, 1225, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -11505,11 +11517,11 @@ static int parser_action_row1096[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1097[] = { +static int parser_action_row1099[] = { 1, -1, 1, 682 }; -static int parser_action_row1098[] = { +static int parser_action_row1100[] = { 22, -1, 1, 362, 12, 0, 153, @@ -11534,7 +11546,7 @@ static int parser_action_row1098[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1099[] = { +static int parser_action_row1101[] = { 25, -1, 1, 348, 12, 0, 108, @@ -11562,12 +11574,12 @@ static int parser_action_row1099[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row1100[] = { +static int parser_action_row1102[] = { 2, - -1, 3, 1099, - 85, 0, 1227 + -1, 3, 1101, + 85, 0, 1229 }; -static int parser_action_row1101[] = { +static int parser_action_row1103[] = { 28, -1, 1, 348, 12, 0, 108, @@ -11598,55 +11610,55 @@ static int parser_action_row1101[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row1102[] = { +static int parser_action_row1104[] = { 3, -1, 1, 359, - 12, 0, 1230, + 12, 0, 1232, 84, 0, 223 }; -static int parser_action_row1103[] = { +static int parser_action_row1105[] = { 4, -1, 1, 361, - 12, 0, 1231, + 12, 0, 1233, 83, 0, 49, 84, 0, 225 }; -static int parser_action_row1104[] = { +static int parser_action_row1106[] = { 1, -1, 1, 665 }; -static int parser_action_row1105[] = { +static int parser_action_row1107[] = { 1, -1, 1, 670 }; -static int parser_action_row1106[] = { +static int parser_action_row1108[] = { 1, -1, 1, 662 }; -static int parser_action_row1107[] = { +static int parser_action_row1109[] = { 1, -1, 1, 667 }; -static int parser_action_row1108[] = { +static int parser_action_row1110[] = { 1, -1, 1, 664 }; -static int parser_action_row1109[] = { +static int parser_action_row1111[] = { 1, -1, 1, 669 }; -static int parser_action_row1110[] = { +static int parser_action_row1112[] = { 2, -1, 1, 202, 27, 1, 653 }; -static int parser_action_row1111[] = { +static int parser_action_row1113[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1112[] = { +static int parser_action_row1114[] = { 32, -1, 1, 362, 0, 0, 1, @@ -11681,29 +11693,29 @@ static int parser_action_row1112[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1113[] = { +static int parser_action_row1115[] = { 2, - -1, 3, 1112, - 27, 0, 1236 + -1, 3, 1114, + 27, 0, 1238 }; -static int parser_action_row1114[] = { +static int parser_action_row1116[] = { 2, -1, 1, 558, - 82, 0, 472 + 82, 0, 474 }; -static int parser_action_row1115[] = { +static int parser_action_row1117[] = { 1, -1, 1, 159 }; -static int parser_action_row1116[] = { +static int parser_action_row1118[] = { 1, -1, 1, 455 }; -static int parser_action_row1117[] = { +static int parser_action_row1119[] = { 1, -1, 1, 556 }; -static int parser_action_row1118[] = { +static int parser_action_row1120[] = { 22, -1, 1, 362, 12, 0, 153, @@ -11728,775 +11740,775 @@ static int parser_action_row1118[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1119[] = { +static int parser_action_row1121[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row1120[] = { +static int parser_action_row1122[] = { 1, -1, 1, 320 }; -static int parser_action_row1121[] = { +static int parser_action_row1123[] = { 1, -1, 1, 333 }; -static int parser_action_row1122[] = { +static int parser_action_row1124[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row1123[] = { +static int parser_action_row1125[] = { 1, -1, 1, 155 }; -static int parser_action_row1124[] = { +static int parser_action_row1126[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1125[] = { +static int parser_action_row1127[] = { 1, -1, 1, 405 }; -static int parser_action_row1126[] = { +static int parser_action_row1128[] = { 2, - -1, 3, 1125, - 83, 0, 1241 + -1, 3, 1127, + 83, 0, 1243 }; -static int parser_action_row1127[] = { +static int parser_action_row1129[] = { 2, -1, 1, 558, - 82, 0, 472 + 82, 0, 474 }; -static int parser_action_row1128[] = { +static int parser_action_row1130[] = { 3, -1, 1, 344, 54, 0, 242, - 66, 0, 1243 + 66, 0, 1245 }; -static int parser_action_row1129[] = { +static int parser_action_row1131[] = { 1, -1, 1, 426 }; -static int parser_action_row1130[] = { +static int parser_action_row1132[] = { 3, - -1, 3, 1129, - 50, 0, 1125, - 83, 0, 1126 + -1, 3, 1131, + 50, 0, 1127, + 83, 0, 1128 }; -static int parser_action_row1131[] = { +static int parser_action_row1133[] = { 2, -1, 1, 430, 66, 1, 432 }; -static int parser_action_row1132[] = { +static int parser_action_row1134[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1133[] = { +static int parser_action_row1135[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1134[] = { +static int parser_action_row1136[] = { 1, -1, 1, 425 }; -static int parser_action_row1135[] = { +static int parser_action_row1137[] = { 1, -1, 1, 435 }; -static int parser_action_row1136[] = { +static int parser_action_row1138[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row1137[] = { +static int parser_action_row1139[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row1138[] = { +static int parser_action_row1140[] = { 20, -1, 1, 362, - 12, 0, 845, - 34, 0, 847, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 34, 0, 849, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row1139[] = { +static int parser_action_row1141[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1140[] = { +static int parser_action_row1142[] = { 20, -1, 1, 362, - 12, 0, 845, - 34, 0, 847, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 34, 0, 849, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row1141[] = { +static int parser_action_row1143[] = { 20, -1, 1, 362, - 12, 0, 845, - 34, 0, 847, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, - 83, 0, 49, - 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, - 90, 0, 55, - 93, 0, 861 -}; -static int parser_action_row1142[] = { - 19, - -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 34, 0, 849, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row1143[] = { +static int parser_action_row1144[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 -}; -static int parser_action_row1144[] = { - 3, - -1, 3, 1143, - 50, 0, 1256, - 83, 0, 1257 + 93, 0, 863 }; static int parser_action_row1145[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1146[] = { - 19, - -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, - 83, 0, 49, - 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, - 90, 0, 55, - 93, 0, 861 + 3, + -1, 3, 1145, + 50, 0, 1258, + 83, 0, 1259 }; static int parser_action_row1147[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1148[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1149[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1150[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1151[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1152[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1153[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1154[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1155[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1156[] = { 19, -1, 1, 362, - 12, 0, 845, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; static int parser_action_row1157[] = { + 19, + -1, 1, 362, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, + 83, 0, 49, + 84, 0, 50, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, + 90, 0, 55, + 93, 0, 863 +}; +static int parser_action_row1158[] = { + 19, + -1, 1, 362, + 12, 0, 847, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, + 83, 0, 49, + 84, 0, 50, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, + 90, 0, 55, + 93, 0, 863 +}; +static int parser_action_row1159[] = { 5, -1, 1, 362, - 12, 0, 1271, - 49, 0, 1272, + 12, 0, 1273, + 49, 0, 1274, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row1158[] = { +static int parser_action_row1160[] = { 1, -1, 1, 127 }; -static int parser_action_row1159[] = { +static int parser_action_row1161[] = { 2, -1, 1, 126, - 64, 0, 1275 + 64, 0, 1277 }; -static int parser_action_row1160[] = { +static int parser_action_row1162[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1161[] = { +static int parser_action_row1163[] = { 1, -1, 1, 117 }; -static int parser_action_row1162[] = { +static int parser_action_row1164[] = { 2, - -1, 3, 1161, - 84, 0, 875 + -1, 3, 1163, + 84, 0, 877 }; -static int parser_action_row1163[] = { +static int parser_action_row1165[] = { 1, -1, 1, 831 }; -static int parser_action_row1164[] = { +static int parser_action_row1166[] = { 1, -1, 1, 121 }; -static int parser_action_row1165[] = { +static int parser_action_row1167[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1166[] = { +static int parser_action_row1168[] = { 1, -1, 1, 832 }; -static int parser_action_row1167[] = { +static int parser_action_row1169[] = { 2, -1, 1, 130, - 58, 0, 1164 + 58, 0, 1166 }; -static int parser_action_row1168[] = { +static int parser_action_row1170[] = { 18, - -1, 3, 1167, - 49, 0, 1280, - 56, 0, 488, - 67, 0, 489, - 68, 0, 490, - 69, 0, 491, - 70, 0, 492, - 71, 0, 493, - 72, 0, 494, - 73, 0, 495, - 74, 0, 496, - 75, 0, 497, - 76, 0, 498, - 77, 0, 499, - 78, 0, 500, - 79, 0, 501, - 80, 0, 502, - 84, 0, 503 + -1, 3, 1169, + 49, 0, 1282, + 56, 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, + 79, 0, 503, + 80, 0, 504, + 84, 0, 505 }; -static int parser_action_row1169[] = { +static int parser_action_row1171[] = { 3, -1, 1, 151, 31, 0, 35, 96, 0, 57 }; -static int parser_action_row1170[] = { +static int parser_action_row1172[] = { 1, -1, 1, 393 }; -static int parser_action_row1171[] = { +static int parser_action_row1173[] = { 1, -1, 1, 387 }; -static int parser_action_row1172[] = { +static int parser_action_row1174[] = { 1, -1, 1, 53 }; -static int parser_action_row1173[] = { +static int parser_action_row1175[] = { 2, -1, 1, 162, 59, 0, 290 }; -static int parser_action_row1174[] = { +static int parser_action_row1176[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1175[] = { +static int parser_action_row1177[] = { 1, -1, 1, 828 }; -static int parser_action_row1176[] = { +static int parser_action_row1178[] = { 2, - -1, 3, 1175, - 57, 0, 1286 + -1, 3, 1177, + 57, 0, 1288 }; -static int parser_action_row1177[] = { +static int parser_action_row1179[] = { 4, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 58, 0, 1173 + 58, 0, 1175 }; -static int parser_action_row1178[] = { +static int parser_action_row1180[] = { 1, -1, 1, 28 }; -static int parser_action_row1179[] = { +static int parser_action_row1181[] = { 4, -1, 1, 42, - 9, 0, 1289, + 9, 0, 1291, 13, 0, 28, - 44, 0, 1050 + 44, 0, 1052 }; -static int parser_action_row1180[] = { +static int parser_action_row1182[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1181[] = { +static int parser_action_row1183[] = { 3, -1, 1, 42, - 9, 0, 1291, + 9, 0, 1293, 13, 0, 28 }; -static int parser_action_row1182[] = { +static int parser_action_row1184[] = { 3, - -1, 3, 1181, - 50, 0, 346, - 83, 0, 347 + -1, 3, 1183, + 50, 0, 347, + 83, 0, 348 }; -static int parser_action_row1183[] = { +static int parser_action_row1185[] = { 8, - -1, 3, 1182, - 10, 0, 1293, - 11, 0, 1294, - 12, 0, 1295, - 16, 0, 1296, - 17, 0, 1297, - 18, 0, 1298, - 41, 0, 1299 + -1, 3, 1184, + 10, 0, 1295, + 11, 0, 1296, + 12, 0, 1297, + 16, 0, 1298, + 17, 0, 1299, + 18, 0, 1300, + 41, 0, 1301 }; -static int parser_action_row1184[] = { +static int parser_action_row1186[] = { 4, -1, 1, 94, 22, 0, 199, 23, 0, 200, 24, 0, 201 }; -static int parser_action_row1185[] = { +static int parser_action_row1187[] = { 2, -1, 1, 42, 13, 0, 28 }; -static int parser_action_row1186[] = { +static int parser_action_row1188[] = { 4, -1, 1, 94, 22, 0, 199, 23, 0, 200, 24, 0, 201 }; -static int parser_action_row1187[] = { +static int parser_action_row1189[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1188[] = { +static int parser_action_row1190[] = { 3, - -1, 3, 1187, + -1, 3, 1189, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row1189[] = { +static int parser_action_row1191[] = { 1, -1, 1, 811 }; -static int parser_action_row1190[] = { +static int parser_action_row1192[] = { 3, - -1, 3, 1189, + -1, 3, 1191, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row1191[] = { +static int parser_action_row1193[] = { 1, -1, 1, 30 }; -static int parser_action_row1192[] = { +static int parser_action_row1194[] = { 3, -1, 1, 42, - 9, 0, 1306, + 9, 0, 1308, 13, 0, 28 }; -static int parser_action_row1193[] = { +static int parser_action_row1195[] = { 1, -1, 1, 34 }; -static int parser_action_row1194[] = { +static int parser_action_row1196[] = { 4, -1, 1, 42, - 9, 0, 1307, + 9, 0, 1309, 13, 0, 28, - 44, 0, 1050 + 44, 0, 1052 }; -static int parser_action_row1195[] = { +static int parser_action_row1197[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1196[] = { +static int parser_action_row1198[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1197[] = { +static int parser_action_row1199[] = { 1, -1, 1, 27 }; -static int parser_action_row1198[] = { +static int parser_action_row1200[] = { 4, -1, 1, 42, - 9, 0, 1311, + 9, 0, 1313, 13, 0, 28, - 44, 0, 1050 + 44, 0, 1052 }; -static int parser_action_row1199[] = { +static int parser_action_row1201[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1200[] = { +static int parser_action_row1202[] = { 3, -1, 1, 42, - 9, 0, 1313, + 9, 0, 1315, 13, 0, 28 }; -static int parser_action_row1201[] = { +static int parser_action_row1203[] = { 2, - -1, 3, 1200, - 48, 0, 1314 + -1, 3, 1202, + 48, 0, 1316 }; -static int parser_action_row1202[] = { +static int parser_action_row1204[] = { 2, - -1, 3, 1201, - 55, 0, 1315 + -1, 3, 1203, + 55, 0, 1317 }; -static int parser_action_row1203[] = { +static int parser_action_row1205[] = { 1, -1, 1, 766 }; -static int parser_action_row1204[] = { +static int parser_action_row1206[] = { 1, -1, 1, 761 }; -static int parser_action_row1205[] = { +static int parser_action_row1207[] = { 2, - -1, 3, 1204, - 59, 0, 1316 + -1, 3, 1206, + 59, 0, 1318 }; -static int parser_action_row1206[] = { +static int parser_action_row1208[] = { 2, - -1, 3, 1205, - 55, 0, 1317 + -1, 3, 1207, + 55, 0, 1319 }; -static int parser_action_row1207[] = { +static int parser_action_row1209[] = { 22, -1, 1, 362, 12, 0, 153, @@ -12521,7 +12533,7 @@ static int parser_action_row1207[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1208[] = { +static int parser_action_row1210[] = { 22, -1, 1, 362, 12, 0, 153, @@ -12546,7 +12558,7 @@ static int parser_action_row1208[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1209[] = { +static int parser_action_row1211[] = { 22, -1, 1, 362, 12, 0, 153, @@ -12571,7 +12583,7 @@ static int parser_action_row1209[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1210[] = { +static int parser_action_row1212[] = { 22, -1, 1, 362, 12, 0, 153, @@ -12596,15 +12608,15 @@ static int parser_action_row1210[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1211[] = { +static int parser_action_row1213[] = { 5, -1, 1, 362, - 12, 0, 559, - 49, 0, 560, + 12, 0, 561, + 49, 0, 562, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row1212[] = { +static int parser_action_row1214[] = { 22, -1, 1, 362, 12, 0, 153, @@ -12629,7 +12641,7 @@ static int parser_action_row1212[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1213[] = { +static int parser_action_row1215[] = { 22, -1, 1, 362, 12, 0, 153, @@ -12654,23 +12666,23 @@ static int parser_action_row1213[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1214[] = { +static int parser_action_row1216[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1215[] = { +static int parser_action_row1217[] = { 2, - -1, 3, 1214, - 48, 0, 1327 + -1, 3, 1216, + 48, 0, 1329 }; -static int parser_action_row1216[] = { +static int parser_action_row1218[] = { 2, - -1, 3, 1215, - 55, 0, 1328 + -1, 3, 1217, + 55, 0, 1330 }; -static int parser_action_row1217[] = { +static int parser_action_row1219[] = { 22, -1, 1, 362, 12, 0, 153, @@ -12695,37 +12707,37 @@ static int parser_action_row1217[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1218[] = { +static int parser_action_row1220[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1219[] = { +static int parser_action_row1221[] = { 33, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 665, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 27, 0, 670, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 667, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 27, 0, 672, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -12737,30 +12749,30 @@ static int parser_action_row1219[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1220[] = { +static int parser_action_row1222[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 783, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 785, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -12772,61 +12784,61 @@ static int parser_action_row1220[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1221[] = { +static int parser_action_row1223[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1222[] = { +static int parser_action_row1224[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1223[] = { +static int parser_action_row1225[] = { 1, -1, 1, 683 }; -static int parser_action_row1224[] = { +static int parser_action_row1226[] = { 2, -1, 1, 164, 27, 1, 622 }; -static int parser_action_row1225[] = { +static int parser_action_row1227[] = { 2, -1, 1, 163, 27, 1, 621 }; -static int parser_action_row1226[] = { +static int parser_action_row1228[] = { 1, -1, 1, 655 }; -static int parser_action_row1227[] = { +static int parser_action_row1229[] = { 2, -1, 1, 196, 27, 1, 647 }; -static int parser_action_row1228[] = { +static int parser_action_row1230[] = { 4, -1, 1, 280, - 61, 0, 1336, - 62, 0, 371, - 63, 0, 372 + 61, 0, 1338, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row1229[] = { +static int parser_action_row1231[] = { 4, -1, 1, 282, - 61, 0, 1338, - 62, 0, 371, - 63, 0, 372 + 61, 0, 1340, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row1230[] = { +static int parser_action_row1232[] = { 2, -1, 1, 193, 27, 1, 644 }; -static int parser_action_row1231[] = { +static int parser_action_row1233[] = { 23, -1, 1, 348, 12, 0, 108, @@ -12840,7 +12852,7 @@ static int parser_action_row1231[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -12852,7 +12864,7 @@ static int parser_action_row1231[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row1232[] = { +static int parser_action_row1234[] = { 23, -1, 1, 348, 12, 0, 108, @@ -12866,7 +12878,7 @@ static int parser_action_row1232[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -12878,13 +12890,13 @@ static int parser_action_row1232[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row1233[] = { +static int parser_action_row1235[] = { 3, -1, 1, 360, - 12, 0, 1342, - 84, 0, 389 + 12, 0, 1344, + 84, 0, 390 }; -static int parser_action_row1234[] = { +static int parser_action_row1236[] = { 22, -1, 1, 362, 12, 0, 153, @@ -12909,437 +12921,437 @@ static int parser_action_row1234[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1235[] = { +static int parser_action_row1237[] = { 1, -1, 1, 239 }; -static int parser_action_row1236[] = { +static int parser_action_row1238[] = { 2, - -1, 3, 1235, + -1, 3, 1237, 52, 0, 172 }; -static int parser_action_row1237[] = { +static int parser_action_row1239[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1238[] = { +static int parser_action_row1240[] = { 1, -1, 1, 456 }; -static int parser_action_row1239[] = { +static int parser_action_row1241[] = { 1, -1, 1, 753 }; -static int parser_action_row1240[] = { +static int parser_action_row1242[] = { 1, -1, 1, 156 }; -static int parser_action_row1241[] = { +static int parser_action_row1243[] = { 2, - -1, 3, 1240, - 26, 0, 1346 + -1, 3, 1242, + 26, 0, 1348 }; -static int parser_action_row1242[] = { +static int parser_action_row1244[] = { 2, -1, 1, 558, - 82, 0, 472 + 82, 0, 474 }; -static int parser_action_row1243[] = { +static int parser_action_row1245[] = { 1, -1, 1, 565 }; -static int parser_action_row1244[] = { +static int parser_action_row1246[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1245[] = { +static int parser_action_row1247[] = { 1, -1, 1, 428 }; -static int parser_action_row1246[] = { +static int parser_action_row1248[] = { 2, - -1, 3, 1245, - 66, 0, 1243 + -1, 3, 1247, + 66, 0, 1245 }; -static int parser_action_row1247[] = { +static int parser_action_row1249[] = { 5, -1, 1, 362, - 12, 0, 1271, - 49, 0, 1272, + 12, 0, 1273, + 49, 0, 1274, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row1248[] = { +static int parser_action_row1250[] = { 2, - -1, 3, 1247, - 55, 0, 1350 + -1, 3, 1249, + 55, 0, 1352 }; -static int parser_action_row1249[] = { +static int parser_action_row1251[] = { 1, -1, 1, 290 }; -static int parser_action_row1250[] = { +static int parser_action_row1252[] = { 1, -1, 1, 289 }; -static int parser_action_row1251[] = { +static int parser_action_row1253[] = { 1, -1, 1, 401 }; -static int parser_action_row1252[] = { +static int parser_action_row1254[] = { 20, -1, 1, 362, - 12, 0, 845, - 34, 0, 847, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 34, 0, 849, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row1253[] = { +static int parser_action_row1255[] = { 1, -1, 1, 400 }; -static int parser_action_row1254[] = { +static int parser_action_row1256[] = { 1, -1, 1, 403 }; -static int parser_action_row1255[] = { +static int parser_action_row1257[] = { 3, -1, 1, 411, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1256[] = { +static int parser_action_row1258[] = { 3, -1, 1, 414, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1257[] = { +static int parser_action_row1259[] = { 2, - -1, 3, 1256, - 83, 0, 1352 + -1, 3, 1258, + 83, 0, 1354 }; -static int parser_action_row1258[] = { +static int parser_action_row1260[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row1259[] = { +static int parser_action_row1261[] = { 1, -1, 1, 416 }; -static int parser_action_row1260[] = { +static int parser_action_row1262[] = { 4, -1, 1, 418, - 69, 0, 1018, - 70, 0, 1019, - 71, 0, 1020 + 69, 0, 1020, + 70, 0, 1021, + 71, 0, 1022 }; -static int parser_action_row1261[] = { +static int parser_action_row1263[] = { 4, -1, 1, 419, - 69, 0, 1018, - 70, 0, 1019, - 71, 0, 1020 + 69, 0, 1020, + 70, 0, 1021, + 71, 0, 1022 }; -static int parser_action_row1262[] = { +static int parser_action_row1264[] = { 3, -1, 1, 407, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1263[] = { +static int parser_action_row1265[] = { 3, -1, 1, 408, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1264[] = { +static int parser_action_row1266[] = { 3, -1, 1, 409, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1265[] = { +static int parser_action_row1267[] = { 3, -1, 1, 410, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1266[] = { +static int parser_action_row1268[] = { 3, -1, 1, 412, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1267[] = { +static int parser_action_row1269[] = { 3, -1, 1, 413, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1268[] = { +static int parser_action_row1270[] = { 3, -1, 1, 415, - 67, 0, 1009, - 68, 0, 1010 + 67, 0, 1011, + 68, 0, 1012 }; -static int parser_action_row1269[] = { +static int parser_action_row1271[] = { 1, -1, 1, 421 }; -static int parser_action_row1270[] = { +static int parser_action_row1272[] = { 1, -1, 1, 422 }; -static int parser_action_row1271[] = { +static int parser_action_row1273[] = { 1, -1, 1, 423 }; -static int parser_action_row1272[] = { +static int parser_action_row1274[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row1273[] = { +static int parser_action_row1275[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1274[] = { +static int parser_action_row1276[] = { 2, - -1, 3, 1273, - 85, 0, 1356 + -1, 3, 1275, + 85, 0, 1358 }; -static int parser_action_row1275[] = { +static int parser_action_row1277[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row1276[] = { +static int parser_action_row1278[] = { 1, -1, 1, 128 }; -static int parser_action_row1277[] = { +static int parser_action_row1279[] = { 1, -1, 1, 116 }; -static int parser_action_row1278[] = { +static int parser_action_row1280[] = { 1, -1, 1, 123 }; -static int parser_action_row1279[] = { +static int parser_action_row1281[] = { 20, - -1, 3, 1278, - 44, 0, 1030, - 50, 0, 346, - 56, 0, 488, - 67, 0, 489, - 68, 0, 490, - 69, 0, 491, - 70, 0, 492, - 71, 0, 493, - 72, 0, 494, - 73, 0, 495, - 74, 0, 496, - 75, 0, 497, - 76, 0, 498, - 77, 0, 499, - 78, 0, 500, - 79, 0, 501, - 80, 0, 502, - 83, 0, 347, - 84, 0, 503 + -1, 3, 1280, + 44, 0, 1032, + 50, 0, 347, + 56, 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, + 79, 0, 503, + 80, 0, 504, + 83, 0, 348, + 84, 0, 505 }; -static int parser_action_row1280[] = { +static int parser_action_row1282[] = { 1, -1, 1, 833 }; -static int parser_action_row1281[] = { +static int parser_action_row1283[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1282[] = { +static int parser_action_row1284[] = { 1, -1, 1, 137 }; -static int parser_action_row1283[] = { +static int parser_action_row1285[] = { 1, -1, 1, 150 }; -static int parser_action_row1284[] = { +static int parser_action_row1286[] = { 1, -1, 1, 390 }; -static int parser_action_row1285[] = { +static int parser_action_row1287[] = { 1, -1, 1, 54 }; -static int parser_action_row1286[] = { +static int parser_action_row1288[] = { 2, - -1, 3, 1285, - 83, 0, 1042 + -1, 3, 1287, + 83, 0, 1044 }; -static int parser_action_row1287[] = { +static int parser_action_row1289[] = { 1, -1, 1, 49 }; -static int parser_action_row1288[] = { +static int parser_action_row1290[] = { 1, -1, 1, 829 }; -static int parser_action_row1289[] = { +static int parser_action_row1291[] = { 2, - -1, 3, 1288, - 57, 0, 1361 + -1, 3, 1290, + 57, 0, 1363 }; -static int parser_action_row1290[] = { +static int parser_action_row1292[] = { 1, -1, 1, 32 }; -static int parser_action_row1291[] = { +static int parser_action_row1293[] = { 3, -1, 1, 42, - 9, 0, 1362, + 9, 0, 1364, 13, 0, 28 }; -static int parser_action_row1292[] = { +static int parser_action_row1294[] = { 1, -1, 1, 36 }; -static int parser_action_row1293[] = { +static int parser_action_row1295[] = { 2, -1, 1, 89, - 14, 0, 394 + 14, 0, 395 }; -static int parser_action_row1294[] = { +static int parser_action_row1296[] = { 17, - -1, 3, 1293, - 56, 0, 488, - 67, 0, 489, - 68, 0, 490, - 69, 0, 491, - 70, 0, 492, - 71, 0, 493, - 72, 0, 494, - 73, 0, 495, - 74, 0, 496, - 75, 0, 497, - 76, 0, 498, - 77, 0, 499, - 78, 0, 500, - 79, 0, 501, - 80, 0, 502, - 84, 0, 503 + -1, 3, 1295, + 56, 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, + 79, 0, 503, + 80, 0, 504, + 84, 0, 505 }; -static int parser_action_row1295[] = { +static int parser_action_row1297[] = { 2, - -1, 3, 1294, - 83, 0, 1365 + -1, 3, 1296, + 83, 0, 1367 }; -static int parser_action_row1296[] = { +static int parser_action_row1298[] = { 21, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 54, 0, 623, - 56, 0, 488, - 59, 0, 624, - 67, 0, 489, - 68, 0, 490, - 69, 0, 491, - 70, 0, 492, - 71, 0, 493, - 72, 0, 494, - 73, 0, 495, - 74, 0, 496, - 75, 0, 497, - 76, 0, 498, - 77, 0, 499, - 78, 0, 500, - 79, 0, 501, - 80, 0, 502, - 84, 0, 503 + 54, 0, 625, + 56, 0, 490, + 59, 0, 626, + 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, + 79, 0, 503, + 80, 0, 504, + 84, 0, 505 }; -static int parser_action_row1297[] = { +static int parser_action_row1299[] = { 1, -1, 1, 92 }; -static int parser_action_row1298[] = { +static int parser_action_row1300[] = { 1, -1, 1, 93 }; -static int parser_action_row1299[] = { +static int parser_action_row1301[] = { 3, - -1, 3, 1298, - 84, 0, 1368, - 85, 0, 1369 + -1, 3, 1300, + 84, 0, 1370, + 85, 0, 1371 }; -static int parser_action_row1300[] = { +static int parser_action_row1302[] = { 21, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 54, 0, 623, - 56, 0, 488, - 59, 0, 624, - 67, 0, 489, - 68, 0, 490, - 69, 0, 491, - 70, 0, 492, - 71, 0, 493, - 72, 0, 494, - 73, 0, 495, - 74, 0, 496, - 75, 0, 497, - 76, 0, 498, - 77, 0, 499, - 78, 0, 500, - 79, 0, 501, - 80, 0, 502, - 84, 0, 503 + 54, 0, 625, + 56, 0, 490, + 59, 0, 626, + 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, + 79, 0, 503, + 80, 0, 504, + 84, 0, 505 }; -static int parser_action_row1301[] = { +static int parser_action_row1303[] = { 3, - -1, 3, 1300, - 17, 0, 1297, - 18, 0, 1372 + -1, 3, 1302, + 17, 0, 1299, + 18, 0, 1374 }; -static int parser_action_row1302[] = { +static int parser_action_row1304[] = { 4, -1, 1, 94, 22, 0, 199, 23, 0, 200, 24, 0, 201 }; -static int parser_action_row1303[] = { +static int parser_action_row1305[] = { 2, - -1, 3, 1302, - 18, 0, 1374 + -1, 3, 1304, + 18, 0, 1376 }; -static int parser_action_row1304[] = { +static int parser_action_row1306[] = { 35, -1, 1, 362, 12, 0, 153, @@ -13350,10 +13362,10 @@ static int parser_action_row1304[] = { 29, 0, 33, 30, 0, 34, 34, 0, 155, - 36, 0, 716, - 37, 0, 717, - 38, 0, 718, - 39, 0, 719, + 36, 0, 718, + 37, 0, 719, + 38, 0, 720, + 39, 0, 721, 40, 0, 40, 41, 0, 156, 43, 0, 157, @@ -13361,14 +13373,14 @@ static int parser_action_row1304[] = { 46, 0, 43, 47, 0, 44, 48, 0, 45, - 50, 0, 346, + 50, 0, 347, 51, 0, 158, - 53, 0, 720, + 53, 0, 722, 54, 0, 47, 56, 0, 48, 68, 0, 159, 82, 0, 183, - 83, 0, 721, + 83, 0, 723, 84, 0, 50, 86, 0, 51, 87, 0, 52, @@ -13377,66 +13389,66 @@ static int parser_action_row1304[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1305[] = { +static int parser_action_row1307[] = { 1, -1, 1, 812 }; -static int parser_action_row1306[] = { +static int parser_action_row1308[] = { 1, -1, 1, 815 }; -static int parser_action_row1307[] = { +static int parser_action_row1309[] = { 1, -1, 1, 38 }; -static int parser_action_row1308[] = { +static int parser_action_row1310[] = { 1, -1, 1, 29 }; -static int parser_action_row1309[] = { +static int parser_action_row1311[] = { 4, -1, 1, 42, - 9, 0, 1376, + 9, 0, 1378, 13, 0, 28, - 44, 0, 1050 + 44, 0, 1052 }; -static int parser_action_row1310[] = { +static int parser_action_row1312[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1311[] = { +static int parser_action_row1313[] = { 3, -1, 1, 42, - 9, 0, 1378, + 9, 0, 1380, 13, 0, 28 }; -static int parser_action_row1312[] = { +static int parser_action_row1314[] = { 1, -1, 1, 31 }; -static int parser_action_row1313[] = { +static int parser_action_row1315[] = { 3, -1, 1, 42, - 9, 0, 1379, + 9, 0, 1381, 13, 0, 28 }; -static int parser_action_row1314[] = { +static int parser_action_row1316[] = { 1, -1, 1, 35 }; -static int parser_action_row1315[] = { +static int parser_action_row1317[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1316[] = { +static int parser_action_row1318[] = { 1, -1, 1, 303 }; -static int parser_action_row1317[] = { +static int parser_action_row1319[] = { 22, -1, 1, 362, 12, 0, 153, @@ -13461,48 +13473,48 @@ static int parser_action_row1317[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1318[] = { +static int parser_action_row1320[] = { 4, - -1, 3, 1317, + -1, 3, 1319, 0, 0, 83, 1, 0, 84, 82, 0, 183 }; -static int parser_action_row1319[] = { +static int parser_action_row1321[] = { 1, -1, 1, 489 }; -static int parser_action_row1320[] = { +static int parser_action_row1322[] = { 1, -1, 1, 494 }; -static int parser_action_row1321[] = { +static int parser_action_row1323[] = { 1, -1, 1, 491 }; -static int parser_action_row1322[] = { +static int parser_action_row1324[] = { 1, -1, 1, 496 }; -static int parser_action_row1323[] = { +static int parser_action_row1325[] = { 2, - -1, 3, 1322, - 85, 0, 1384 + -1, 3, 1324, + 85, 0, 1386 }; -static int parser_action_row1324[] = { +static int parser_action_row1326[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row1325[] = { +static int parser_action_row1327[] = { 1, -1, 1, 492 }; -static int parser_action_row1326[] = { +static int parser_action_row1328[] = { 1, -1, 1, 497 }; -static int parser_action_row1327[] = { +static int parser_action_row1329[] = { 20, -1, 1, 362, 12, 0, 108, @@ -13525,21 +13537,21 @@ static int parser_action_row1327[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row1328[] = { +static int parser_action_row1330[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1329[] = { +static int parser_action_row1331[] = { 1, -1, 1, 552 }; -static int parser_action_row1330[] = { +static int parser_action_row1332[] = { 1, -1, 1, 659 }; -static int parser_action_row1331[] = { +static int parser_action_row1333[] = { 22, -1, 1, 362, 12, 0, 153, @@ -13564,27 +13576,27 @@ static int parser_action_row1331[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1332[] = { +static int parser_action_row1334[] = { 2, - -1, 3, 1331, - 27, 0, 1389 + -1, 3, 1333, + 27, 0, 1391 }; -static int parser_action_row1333[] = { +static int parser_action_row1335[] = { 1, -1, 1, 677 }; -static int parser_action_row1334[] = { +static int parser_action_row1336[] = { 2, - -1, 3, 1333, + -1, 3, 1335, 52, 0, 172 }; -static int parser_action_row1335[] = { +static int parser_action_row1337[] = { 3, - -1, 3, 1334, - 55, 0, 1391, - 58, 0, 572 + -1, 3, 1336, + 55, 0, 1393, + 58, 0, 574 }; -static int parser_action_row1336[] = { +static int parser_action_row1338[] = { 22, -1, 1, 362, 12, 0, 153, @@ -13609,7 +13621,7 @@ static int parser_action_row1336[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1337[] = { +static int parser_action_row1339[] = { 22, -1, 1, 362, 12, 0, 153, @@ -13634,7 +13646,7 @@ static int parser_action_row1337[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1338[] = { +static int parser_action_row1340[] = { 22, -1, 1, 362, 12, 0, 153, @@ -13659,7 +13671,7 @@ static int parser_action_row1338[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1339[] = { +static int parser_action_row1341[] = { 22, -1, 1, 362, 12, 0, 153, @@ -13684,7 +13696,7 @@ static int parser_action_row1339[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1340[] = { +static int parser_action_row1342[] = { 22, -1, 1, 362, 12, 0, 153, @@ -13709,17 +13721,17 @@ static int parser_action_row1340[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1341[] = { +static int parser_action_row1343[] = { 2, -1, 1, 198, 27, 1, 649 }; -static int parser_action_row1342[] = { +static int parser_action_row1344[] = { 2, -1, 1, 200, 27, 1, 651 }; -static int parser_action_row1343[] = { +static int parser_action_row1345[] = { 23, -1, 1, 348, 12, 0, 108, @@ -13733,7 +13745,7 @@ static int parser_action_row1343[] = { 47, 0, 115, 48, 0, 116, 51, 0, 117, - 54, 0, 385, + 54, 0, 386, 68, 0, 119, 83, 0, 49, 84, 0, 50, @@ -13745,17 +13757,17 @@ static int parser_action_row1343[] = { 90, 0, 55, 93, 0, 124 }; -static int parser_action_row1344[] = { +static int parser_action_row1346[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1345[] = { +static int parser_action_row1347[] = { 1, -1, 1, 237 }; -static int parser_action_row1346[] = { +static int parser_action_row1348[] = { 22, -1, 1, 362, 12, 0, 153, @@ -13780,151 +13792,141 @@ static int parser_action_row1346[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1347[] = { +static int parser_action_row1349[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1348[] = { +static int parser_action_row1350[] = { 1, -1, 1, 566 }; -static int parser_action_row1349[] = { +static int parser_action_row1351[] = { 3, - -1, 3, 1348, + -1, 3, 1350, 83, 0, 49, 84, 0, 50 }; -static int parser_action_row1350[] = { +static int parser_action_row1352[] = { 2, - -1, 3, 1349, - 85, 0, 1402 + -1, 3, 1351, + 85, 0, 1404 }; -static int parser_action_row1351[] = { +static int parser_action_row1353[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row1352[] = { +static int parser_action_row1354[] = { 1, -1, 1, 402 }; -static int parser_action_row1353[] = { +static int parser_action_row1355[] = { 2, -1, 1, 318, 82, 0, 183 }; -static int parser_action_row1354[] = { +static int parser_action_row1356[] = { 1, -1, 1, 394 }; -static int parser_action_row1355[] = { +static int parser_action_row1357[] = { 1, -1, 1, 436 }; -static int parser_action_row1356[] = { +static int parser_action_row1358[] = { 3, - -1, 3, 1355, - 34, 0, 1405, - 54, 0, 1406 + -1, 3, 1357, + 34, 0, 1407, + 54, 0, 1408 }; -static int parser_action_row1357[] = { +static int parser_action_row1359[] = { 1, -1, 1, 431 }; -static int parser_action_row1358[] = { +static int parser_action_row1360[] = { 1, -1, 1, 433 }; -static int parser_action_row1359[] = { +static int parser_action_row1361[] = { 1, -1, 1, 132 }; -static int parser_action_row1360[] = { +static int parser_action_row1362[] = { 5, - -1, 3, 1359, - 34, 0, 1407, - 50, 0, 1408, - 54, 0, 1409, - 83, 0, 347 + -1, 3, 1361, + 34, 0, 1409, + 50, 0, 1410, + 54, 0, 1411, + 83, 0, 348 }; -static int parser_action_row1361[] = { +static int parser_action_row1363[] = { 1, -1, 1, 52 }; -static int parser_action_row1362[] = { +static int parser_action_row1364[] = { 1, -1, 1, 50 }; -static int parser_action_row1363[] = { +static int parser_action_row1365[] = { 1, -1, 1, 40 }; -static int parser_action_row1364[] = { +static int parser_action_row1366[] = { 1, -1, 1, 55 }; -static int parser_action_row1365[] = { +static int parser_action_row1367[] = { 5, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 54, 0, 623, - 59, 0, 624 + 54, 0, 625, + 59, 0, 626 }; -static int parser_action_row1366[] = { +static int parser_action_row1368[] = { 2, - -1, 3, 1365, - 59, 0, 624 + -1, 3, 1367, + 59, 0, 626 }; -static int parser_action_row1367[] = { +static int parser_action_row1369[] = { 5, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 54, 0, 623, - 59, 0, 624 + 54, 0, 625, + 59, 0, 626 }; -static int parser_action_row1368[] = { +static int parser_action_row1370[] = { 3, - -1, 3, 1367, - 14, 0, 1414, - 15, 0, 1415 + -1, 3, 1369, + 14, 0, 1416, + 15, 0, 1417 }; -static int parser_action_row1369[] = { +static int parser_action_row1371[] = { 2, -1, 1, 162, 59, 0, 290 }; -static int parser_action_row1370[] = { +static int parser_action_row1372[] = { 2, -1, 1, 162, 59, 0, 290 }; -static int parser_action_row1371[] = { +static int parser_action_row1373[] = { 5, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 54, 0, 623, - 59, 0, 624 + 54, 0, 625, + 59, 0, 626 }; -static int parser_action_row1372[] = { +static int parser_action_row1374[] = { 3, -1, 1, 145, - 14, 0, 1420, - 89, 0, 1036 -}; -static int parser_action_row1373[] = { - 2, - -1, 3, 1372, - 85, 0, 1422 -}; -static int parser_action_row1374[] = { - 2, - -1, 3, 1373, - 18, 0, 1423 + 14, 0, 1422, + 89, 0, 1038 }; static int parser_action_row1375[] = { 2, @@ -13934,96 +13936,106 @@ static int parser_action_row1375[] = { static int parser_action_row1376[] = { 2, -1, 3, 1375, - 55, 0, 1425 + 18, 0, 1425 }; static int parser_action_row1377[] = { + 2, + -1, 3, 1376, + 85, 0, 1426 +}; +static int parser_action_row1378[] = { + 2, + -1, 3, 1377, + 55, 0, 1427 +}; +static int parser_action_row1379[] = { 1, -1, 1, 33 }; -static int parser_action_row1378[] = { +static int parser_action_row1380[] = { 3, -1, 1, 42, - 9, 0, 1426, + 9, 0, 1428, 13, 0, 28 }; -static int parser_action_row1379[] = { +static int parser_action_row1381[] = { 1, -1, 1, 37 }; -static int parser_action_row1380[] = { +static int parser_action_row1382[] = { 1, -1, 1, 39 }; -static int parser_action_row1381[] = { +static int parser_action_row1383[] = { 2, - -1, 3, 1380, - 55, 0, 1427 + -1, 3, 1382, + 55, 0, 1429 }; -static int parser_action_row1382[] = { +static int parser_action_row1384[] = { 1, -1, 1, 772 }; -static int parser_action_row1383[] = { +static int parser_action_row1385[] = { 3, - -1, 3, 1382, + -1, 3, 1384, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row1384[] = { +static int parser_action_row1386[] = { 1, -1, 1, 327 }; -static int parser_action_row1385[] = { +static int parser_action_row1387[] = { 4, -1, 1, 533, - 61, 0, 1429, - 62, 0, 371, - 63, 0, 372 + 61, 0, 1431, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row1386[] = { +static int parser_action_row1388[] = { 4, -1, 1, 535, - 61, 0, 1431, - 62, 0, 371, - 63, 0, 372 + 61, 0, 1433, + 62, 0, 372, + 63, 0, 373 }; -static int parser_action_row1387[] = { +static int parser_action_row1389[] = { 1, -1, 1, 500 }; -static int parser_action_row1388[] = { +static int parser_action_row1390[] = { 2, - -1, 3, 1387, - 55, 0, 1433 + -1, 3, 1389, + 55, 0, 1435 }; -static int parser_action_row1389[] = { +static int parser_action_row1391[] = { 1, -1, 1, 660 }; -static int parser_action_row1390[] = { +static int parser_action_row1392[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 1094, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 1096, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -14035,54 +14047,54 @@ static int parser_action_row1390[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1391[] = { +static int parser_action_row1393[] = { 2, -1, 1, 234, 27, 1, 676 }; -static int parser_action_row1392[] = { +static int parser_action_row1394[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1393[] = { +static int parser_action_row1395[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1394[] = { +static int parser_action_row1396[] = { 1, -1, 1, 661 }; -static int parser_action_row1395[] = { +static int parser_action_row1397[] = { 1, -1, 1, 666 }; -static int parser_action_row1396[] = { +static int parser_action_row1398[] = { 1, -1, 1, 663 }; -static int parser_action_row1397[] = { +static int parser_action_row1399[] = { 1, -1, 1, 668 }; -static int parser_action_row1398[] = { +static int parser_action_row1400[] = { 2, -1, 1, 199, 27, 1, 650 }; -static int parser_action_row1399[] = { +static int parser_action_row1401[] = { 2, - -1, 3, 1398, - 15, 0, 1437 + -1, 3, 1400, + 15, 0, 1439 }; -static int parser_action_row1400[] = { +static int parser_action_row1402[] = { 1, -1, 1, 247 }; -static int parser_action_row1401[] = { +static int parser_action_row1403[] = { 22, -1, 1, 362, 12, 0, 153, @@ -14107,91 +14119,91 @@ static int parser_action_row1401[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1402[] = { +static int parser_action_row1404[] = { 2, -1, 1, 344, 54, 0, 242 }; -static int parser_action_row1403[] = { +static int parser_action_row1405[] = { 2, -1, 1, 429, 66, 1, 431 }; -static int parser_action_row1404[] = { +static int parser_action_row1406[] = { 1, -1, 1, 449 }; -static int parser_action_row1405[] = { +static int parser_action_row1407[] = { 1, -1, 1, 395 }; -static int parser_action_row1406[] = { +static int parser_action_row1408[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1407[] = { +static int parser_action_row1409[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1408[] = { +static int parser_action_row1410[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1409[] = { +static int parser_action_row1411[] = { 2, -1, 1, 142, - 83, 0, 479 + 83, 0, 481 }; -static int parser_action_row1410[] = { +static int parser_action_row1412[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1411[] = { +static int parser_action_row1413[] = { 1, -1, 1, 140 }; -static int parser_action_row1412[] = { +static int parser_action_row1414[] = { 4, -1, 1, 131, - 4, 0, 749, - 14, 0, 1444, - 15, 0, 1445 + 4, 0, 751, + 14, 0, 1446, + 15, 0, 1447 }; -static int parser_action_row1413[] = { +static int parser_action_row1415[] = { 2, -1, 1, 89, - 14, 0, 394 + 14, 0, 395 }; -static int parser_action_row1414[] = { +static int parser_action_row1416[] = { 3, - -1, 3, 1413, - 14, 0, 1414, - 15, 0, 1450 + -1, 3, 1415, + 14, 0, 1416, + 15, 0, 1452 }; -static int parser_action_row1415[] = { +static int parser_action_row1417[] = { 7, - -1, 3, 1414, + -1, 3, 1416, 0, 0, 83, 1, 0, 84, - 4, 0, 339, - 16, 0, 340, - 17, 0, 341, - 84, 0, 343 + 4, 0, 340, + 16, 0, 341, + 17, 0, 342, + 84, 0, 344 }; -static int parser_action_row1416[] = { +static int parser_action_row1418[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -14221,77 +14233,77 @@ static int parser_action_row1416[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1417[] = { +static int parser_action_row1419[] = { 2, - -1, 3, 1416, - 15, 0, 1455 + -1, 3, 1418, + 15, 0, 1457 }; -static int parser_action_row1418[] = { +static int parser_action_row1420[] = { 6, -1, 1, 42, 0, 1, 89, 1, 1, 89, 13, 0, 28, - 14, 0, 394, - 61, 0, 1456 + 14, 0, 395, + 61, 0, 1458 }; -static int parser_action_row1419[] = { +static int parser_action_row1421[] = { 2, -1, 1, 66, - 61, 0, 1460 + 61, 0, 1462 }; -static int parser_action_row1420[] = { +static int parser_action_row1422[] = { 3, -1, 1, 145, - 14, 0, 1461, - 89, 0, 1036 + 14, 0, 1463, + 89, 0, 1038 }; -static int parser_action_row1421[] = { +static int parser_action_row1423[] = { 3, - -1, 3, 1420, - 19, 0, 1463, - 20, 0, 1464 + -1, 3, 1422, + 19, 0, 1465, + 20, 0, 1466 }; -static int parser_action_row1422[] = { +static int parser_action_row1424[] = { 2, -1, 1, 131, - 4, 0, 749 + 4, 0, 751 }; -static int parser_action_row1423[] = { +static int parser_action_row1425[] = { 2, -1, 1, 162, 59, 0, 290 }; -static int parser_action_row1424[] = { +static int parser_action_row1426[] = { 2, - -1, 3, 1423, - 85, 0, 1467 + -1, 3, 1425, + 85, 0, 1469 }; -static int parser_action_row1425[] = { +static int parser_action_row1427[] = { 2, -1, 1, 162, 59, 0, 290 }; -static int parser_action_row1426[] = { +static int parser_action_row1428[] = { 4, - -1, 3, 1425, + -1, 3, 1427, 0, 0, 83, 1, 0, 84, 82, 0, 183 }; -static int parser_action_row1427[] = { +static int parser_action_row1429[] = { 1, -1, 1, 41 }; -static int parser_action_row1428[] = { +static int parser_action_row1430[] = { 1, -1, 1, 304 }; -static int parser_action_row1429[] = { +static int parser_action_row1431[] = { 1, -1, 1, 328 }; -static int parser_action_row1430[] = { +static int parser_action_row1432[] = { 22, -1, 1, 362, 12, 0, 153, @@ -14316,7 +14328,7 @@ static int parser_action_row1430[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1431[] = { +static int parser_action_row1433[] = { 22, -1, 1, 362, 12, 0, 153, @@ -14341,7 +14353,7 @@ static int parser_action_row1431[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1432[] = { +static int parser_action_row1434[] = { 22, -1, 1, 362, 12, 0, 153, @@ -14366,7 +14378,7 @@ static int parser_action_row1432[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1433[] = { +static int parser_action_row1435[] = { 22, -1, 1, 362, 12, 0, 153, @@ -14391,25 +14403,25 @@ static int parser_action_row1433[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1434[] = { +static int parser_action_row1436[] = { 1, -1, 1, 553 }; -static int parser_action_row1435[] = { +static int parser_action_row1437[] = { 1, -1, 1, 673 }; -static int parser_action_row1436[] = { +static int parser_action_row1438[] = { 2, - -1, 3, 1435, - 31, 0, 1475 + -1, 3, 1437, + 31, 0, 1477 }; -static int parser_action_row1437[] = { +static int parser_action_row1439[] = { 2, - -1, 3, 1436, - 15, 0, 1476 + -1, 3, 1438, + 15, 0, 1478 }; -static int parser_action_row1438[] = { +static int parser_action_row1440[] = { 32, -1, 1, 362, 0, 0, 1, @@ -14444,59 +14456,59 @@ static int parser_action_row1438[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1439[] = { +static int parser_action_row1441[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1440[] = { +static int parser_action_row1442[] = { 1, -1, 1, 438 }; -static int parser_action_row1441[] = { - 2, - -1, 3, 1440, - 48, 0, 1480 -}; -static int parser_action_row1442[] = { - 4, - -1, 3, 1441, - 34, 0, 1481, - 50, 0, 346, - 83, 0, 347 -}; static int parser_action_row1443[] = { 2, -1, 3, 1442, - 50, 0, 1483 + 48, 0, 1482 }; static int parser_action_row1444[] = { 4, -1, 3, 1443, - 34, 0, 1484, - 50, 0, 1485, - 83, 0, 347 + 34, 0, 1483, + 50, 0, 347, + 83, 0, 348 }; static int parser_action_row1445[] = { - 10, + 2, -1, 3, 1444, + 50, 0, 1485 +}; +static int parser_action_row1446[] = { + 4, + -1, 3, 1445, + 34, 0, 1486, + 50, 0, 1487, + 83, 0, 348 +}; +static int parser_action_row1447[] = { + 10, + -1, 3, 1446, 0, 0, 83, 1, 0, 84, - 4, 0, 339, - 6, 0, 1487, - 16, 0, 340, - 17, 0, 341, - 19, 0, 1488, - 20, 0, 1489, - 84, 0, 343 + 4, 0, 340, + 6, 0, 1489, + 16, 0, 341, + 17, 0, 342, + 19, 0, 1490, + 20, 0, 1491, + 84, 0, 344 }; -static int parser_action_row1446[] = { +static int parser_action_row1448[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -14526,31 +14538,31 @@ static int parser_action_row1446[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1447[] = { +static int parser_action_row1449[] = { 2, - -1, 3, 1446, - 15, 0, 1491 + -1, 3, 1448, + 15, 0, 1493 }; -static int parser_action_row1448[] = { +static int parser_action_row1450[] = { 3, - -1, 3, 1447, + -1, 3, 1449, 31, 0, 35, 96, 0, 57 }; -static int parser_action_row1449[] = { +static int parser_action_row1451[] = { 1, -1, 1, 59 }; -static int parser_action_row1450[] = { +static int parser_action_row1452[] = { 1, -1, 1, 82 }; -static int parser_action_row1451[] = { +static int parser_action_row1453[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -14580,32 +14592,32 @@ static int parser_action_row1451[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1452[] = { +static int parser_action_row1454[] = { 2, - -1, 3, 1451, - 15, 0, 1494 + -1, 3, 1453, + 15, 0, 1496 }; -static int parser_action_row1453[] = { +static int parser_action_row1455[] = { 1, -1, 1, 90 }; -static int parser_action_row1454[] = { +static int parser_action_row1456[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1455[] = { +static int parser_action_row1457[] = { 2, -1, 1, 373, - 9, 0, 1039 + 9, 0, 1041 }; -static int parser_action_row1456[] = { +static int parser_action_row1458[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -14635,132 +14647,132 @@ static int parser_action_row1456[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1457[] = { +static int parser_action_row1459[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1458[] = { +static int parser_action_row1460[] = { 4, -1, 1, 94, 22, 0, 199, 23, 0, 200, 24, 0, 201 }; -static int parser_action_row1459[] = { +static int parser_action_row1461[] = { 1, -1, 1, 74 }; -static int parser_action_row1460[] = { +static int parser_action_row1462[] = { 3, -1, 1, 89, - 14, 0, 394, - 61, 0, 1500 + 14, 0, 395, + 61, 0, 1502 }; -static int parser_action_row1461[] = { +static int parser_action_row1463[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1462[] = { +static int parser_action_row1464[] = { 3, - -1, 3, 1461, - 19, 0, 1503, - 20, 0, 1504 + -1, 3, 1463, + 19, 0, 1505, + 20, 0, 1506 }; -static int parser_action_row1463[] = { +static int parser_action_row1465[] = { 2, -1, 1, 131, - 4, 0, 749 + 4, 0, 751 }; -static int parser_action_row1464[] = { +static int parser_action_row1466[] = { 1, -1, 1, 62 }; -static int parser_action_row1465[] = { +static int parser_action_row1467[] = { 2, -1, 1, 145, - 89, 0, 1036 + 89, 0, 1038 }; -static int parser_action_row1466[] = { +static int parser_action_row1468[] = { 3, - -1, 3, 1465, + -1, 3, 1467, 31, 0, 35, 96, 0, 57 }; -static int parser_action_row1467[] = { +static int parser_action_row1469[] = { 2, -1, 1, 67, - 61, 0, 1508 + 61, 0, 1510 }; -static int parser_action_row1468[] = { +static int parser_action_row1470[] = { 2, -1, 1, 162, 59, 0, 290 }; -static int parser_action_row1469[] = { +static int parser_action_row1471[] = { 2, -1, 1, 68, - 61, 0, 1510 + 61, 0, 1512 }; -static int parser_action_row1470[] = { +static int parser_action_row1472[] = { 3, - -1, 3, 1469, + -1, 3, 1471, 0, 0, 83, 1, 0, 84 }; -static int parser_action_row1471[] = { +static int parser_action_row1473[] = { 1, -1, 1, 813 }; -static int parser_action_row1472[] = { +static int parser_action_row1474[] = { 1, -1, 1, 488 }; -static int parser_action_row1473[] = { +static int parser_action_row1475[] = { 1, -1, 1, 493 }; -static int parser_action_row1474[] = { +static int parser_action_row1476[] = { 1, -1, 1, 490 }; -static int parser_action_row1475[] = { +static int parser_action_row1477[] = { 1, -1, 1, 495 }; -static int parser_action_row1476[] = { +static int parser_action_row1478[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1477[] = { +static int parser_action_row1479[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 783, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 785, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -14772,83 +14784,83 @@ static int parser_action_row1477[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1478[] = { +static int parser_action_row1480[] = { 1, -1, 1, 238 }; -static int parser_action_row1479[] = { +static int parser_action_row1481[] = { 2, - -1, 3, 1478, + -1, 3, 1480, 52, 0, 172 }; -static int parser_action_row1480[] = { +static int parser_action_row1482[] = { 2, - -1, 3, 1479, - 27, 0, 1516 + -1, 3, 1481, + 27, 0, 1518 }; -static int parser_action_row1481[] = { +static int parser_action_row1483[] = { 1, -1, 1, 452 }; -static int parser_action_row1482[] = { +static int parser_action_row1484[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1483[] = { +static int parser_action_row1485[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1484[] = { +static int parser_action_row1486[] = { 1, -1, 1, 144 }; -static int parser_action_row1485[] = { +static int parser_action_row1487[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1486[] = { +static int parser_action_row1488[] = { 4, -1, 1, 380, 0, 0, 1, 1, 0, 2, - 83, 0, 479 + 83, 0, 481 }; -static int parser_action_row1487[] = { +static int parser_action_row1489[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1488[] = { +static int parser_action_row1490[] = { 1, -1, 1, 60 }; -static int parser_action_row1489[] = { +static int parser_action_row1491[] = { 1, -1, 1, 61 }; -static int parser_action_row1490[] = { +static int parser_action_row1492[] = { 2, -1, 1, 145, - 89, 0, 1036 + 89, 0, 1038 }; -static int parser_action_row1491[] = { +static int parser_action_row1493[] = { 2, -1, 1, 373, - 9, 0, 1039 + 9, 0, 1041 }; -static int parser_action_row1492[] = { +static int parser_action_row1494[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -14878,21 +14890,21 @@ static int parser_action_row1492[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1493[] = { +static int parser_action_row1495[] = { 1, -1, 1, 65 }; -static int parser_action_row1494[] = { +static int parser_action_row1496[] = { 2, -1, 1, 373, - 9, 0, 1039 + 9, 0, 1041 }; -static int parser_action_row1495[] = { +static int parser_action_row1497[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 467, + 9, 0, 469, 12, 0, 27, 15, 0, 29, 18, 0, 30, @@ -14922,20 +14934,20 @@ static int parser_action_row1495[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1496[] = { +static int parser_action_row1498[] = { 1, -1, 1, 91 }; -static int parser_action_row1497[] = { +static int parser_action_row1499[] = { 1, -1, 1, 78 }; -static int parser_action_row1498[] = { +static int parser_action_row1500[] = { 2, -1, 1, 373, - 9, 0, 1039 + 9, 0, 1041 }; -static int parser_action_row1499[] = { +static int parser_action_row1501[] = { 22, -1, 1, 362, 12, 0, 153, @@ -14960,22 +14972,22 @@ static int parser_action_row1499[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1500[] = { +static int parser_action_row1502[] = { 2, - -1, 3, 1499, - 17, 0, 1297 + -1, 3, 1501, + 17, 0, 1299 }; -static int parser_action_row1501[] = { +static int parser_action_row1503[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1502[] = { +static int parser_action_row1504[] = { 1, -1, 1, 75 }; -static int parser_action_row1503[] = { +static int parser_action_row1505[] = { 22, -1, 1, 362, 12, 0, 153, @@ -15000,52 +15012,52 @@ static int parser_action_row1503[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1504[] = { +static int parser_action_row1506[] = { 1, -1, 1, 63 }; -static int parser_action_row1505[] = { +static int parser_action_row1507[] = { 2, -1, 1, 145, - 89, 0, 1036 + 89, 0, 1038 }; -static int parser_action_row1506[] = { +static int parser_action_row1508[] = { 3, - -1, 3, 1505, + -1, 3, 1507, 31, 0, 35, 96, 0, 57 }; -static int parser_action_row1507[] = { +static int parser_action_row1509[] = { 2, -1, 1, 131, - 4, 0, 749 + 4, 0, 751 }; -static int parser_action_row1508[] = { +static int parser_action_row1510[] = { 1, -1, 1, 85 }; -static int parser_action_row1509[] = { +static int parser_action_row1511[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1510[] = { +static int parser_action_row1512[] = { 2, -1, 1, 69, - 61, 0, 1535 + 61, 0, 1537 }; -static int parser_action_row1511[] = { +static int parser_action_row1513[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1512[] = { +static int parser_action_row1514[] = { 1, -1, 1, 814 }; -static int parser_action_row1513[] = { +static int parser_action_row1515[] = { 22, -1, 1, 362, 12, 0, 153, @@ -15070,39 +15082,29 @@ static int parser_action_row1513[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1514[] = { +static int parser_action_row1516[] = { 1, -1, 1, 681 }; -static int parser_action_row1515[] = { +static int parser_action_row1517[] = { 2, - -1, 3, 1514, + -1, 3, 1516, 52, 0, 172 }; -static int parser_action_row1516[] = { +static int parser_action_row1518[] = { 1, -1, 1, 236 }; -static int parser_action_row1517[] = { +static int parser_action_row1519[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1518[] = { - 2, - -1, 3, 1517, - 48, 0, 1540 -}; -static int parser_action_row1519[] = { - 2, - -1, 3, 1518, - 55, 0, 1541 -}; static int parser_action_row1520[] = { 2, -1, 3, 1519, - 50, 0, 1542 + 48, 0, 1542 }; static int parser_action_row1521[] = { 2, @@ -15112,41 +15114,51 @@ static int parser_action_row1521[] = { static int parser_action_row1522[] = { 2, -1, 3, 1521, - 55, 0, 1544 + 50, 0, 1544 }; static int parser_action_row1523[] = { 2, - -1, 1, 131, - 4, 0, 749 + -1, 3, 1522, + 55, 0, 1545 }; static int parser_action_row1524[] = { - 1, - -1, 1, 57 + 2, + -1, 3, 1523, + 55, 0, 1546 }; static int parser_action_row1525[] = { 2, - -1, 1, 373, - 9, 0, 1039 + -1, 1, 131, + 4, 0, 751 }; static int parser_action_row1526[] = { 1, - -1, 1, 79 + -1, 1, 57 }; static int parser_action_row1527[] = { 2, -1, 1, 373, - 9, 0, 1039 + 9, 0, 1041 }; static int parser_action_row1528[] = { 1, - -1, 1, 80 + -1, 1, 79 }; static int parser_action_row1529[] = { 2, - -1, 1, 89, - 14, 0, 394 + -1, 1, 373, + 9, 0, 1041 }; static int parser_action_row1530[] = { + 1, + -1, 1, 80 +}; +static int parser_action_row1531[] = { + 2, + -1, 1, 89, + 14, 0, 395 +}; +static int parser_action_row1532[] = { 22, -1, 1, 362, 12, 0, 153, @@ -15171,26 +15183,26 @@ static int parser_action_row1530[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1531[] = { +static int parser_action_row1533[] = { 1, -1, 1, 70 }; -static int parser_action_row1532[] = { +static int parser_action_row1534[] = { 2, -1, 1, 131, - 4, 0, 749 + 4, 0, 751 }; -static int parser_action_row1533[] = { +static int parser_action_row1535[] = { 1, -1, 1, 86 }; -static int parser_action_row1534[] = { +static int parser_action_row1536[] = { 3, -1, 1, 151, 31, 0, 35, 96, 0, 57 }; -static int parser_action_row1535[] = { +static int parser_action_row1537[] = { 22, -1, 1, 362, 12, 0, 153, @@ -15215,13 +15227,13 @@ static int parser_action_row1535[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1536[] = { +static int parser_action_row1538[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1537[] = { +static int parser_action_row1539[] = { 22, -1, 1, 362, 12, 0, 153, @@ -15246,103 +15258,103 @@ static int parser_action_row1537[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1538[] = { +static int parser_action_row1540[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1539[] = { +static int parser_action_row1541[] = { 2, -1, 1, 237, 27, 1, 679 }; -static int parser_action_row1540[] = { +static int parser_action_row1542[] = { 21, -1, 1, 362, - 12, 0, 845, - 25, 0, 846, - 34, 0, 847, - 41, 0, 848, - 43, 0, 849, - 45, 0, 850, - 46, 0, 851, - 47, 0, 852, - 48, 0, 853, - 51, 0, 854, - 54, 0, 855, - 68, 0, 856, + 12, 0, 847, + 25, 0, 848, + 34, 0, 849, + 41, 0, 850, + 43, 0, 851, + 45, 0, 852, + 46, 0, 853, + 47, 0, 854, + 48, 0, 855, + 51, 0, 856, + 54, 0, 857, + 68, 0, 858, 83, 0, 49, 84, 0, 50, - 86, 0, 857, - 87, 0, 858, - 88, 0, 859, - 89, 0, 860, + 86, 0, 859, + 87, 0, 860, + 88, 0, 861, + 89, 0, 862, 90, 0, 55, - 93, 0, 861 + 93, 0, 863 }; -static int parser_action_row1541[] = { +static int parser_action_row1543[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1542[] = { +static int parser_action_row1544[] = { 1, -1, 1, 450 }; -static int parser_action_row1543[] = { +static int parser_action_row1545[] = { 3, -1, 1, 380, 0, 0, 1, 1, 0, 2 }; -static int parser_action_row1544[] = { +static int parser_action_row1546[] = { 1, -1, 1, 141 }; -static int parser_action_row1545[] = { +static int parser_action_row1547[] = { 1, -1, 1, 139 }; -static int parser_action_row1546[] = { +static int parser_action_row1548[] = { 3, -1, 1, 151, 31, 0, 35, 96, 0, 57 }; -static int parser_action_row1547[] = { +static int parser_action_row1549[] = { 1, -1, 1, 58 }; -static int parser_action_row1548[] = { +static int parser_action_row1550[] = { 1, -1, 1, 81 }; -static int parser_action_row1549[] = { +static int parser_action_row1551[] = { 1, -1, 1, 76 }; -static int parser_action_row1550[] = { +static int parser_action_row1552[] = { 2, -1, 1, 89, - 14, 0, 394 + 14, 0, 395 }; -static int parser_action_row1551[] = { +static int parser_action_row1553[] = { 3, -1, 1, 151, 31, 0, 35, 96, 0, 57 }; -static int parser_action_row1552[] = { +static int parser_action_row1554[] = { 1, -1, 1, 83 }; -static int parser_action_row1553[] = { +static int parser_action_row1555[] = { 1, -1, 1, 71 }; -static int parser_action_row1554[] = { +static int parser_action_row1556[] = { 22, -1, 1, 362, 12, 0, 153, @@ -15367,69 +15379,69 @@ static int parser_action_row1554[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1555[] = { +static int parser_action_row1557[] = { 1, -1, 1, 72 }; -static int parser_action_row1556[] = { +static int parser_action_row1558[] = { 2, - -1, 3, 1555, - 15, 0, 1563 + -1, 3, 1557, + 15, 0, 1565 }; -static int parser_action_row1557[] = { +static int parser_action_row1559[] = { 1, -1, 1, 398 }; -static int parser_action_row1558[] = { +static int parser_action_row1560[] = { 2, - -1, 3, 1557, - 55, 0, 1564 + -1, 3, 1559, + 55, 0, 1566 }; -static int parser_action_row1559[] = { +static int parser_action_row1561[] = { 2, - -1, 3, 1558, - 55, 0, 1565 + -1, 3, 1560, + 55, 0, 1567 }; -static int parser_action_row1560[] = { +static int parser_action_row1562[] = { 1, -1, 1, 64 }; -static int parser_action_row1561[] = { +static int parser_action_row1563[] = { 1, -1, 1, 77 }; -static int parser_action_row1562[] = { +static int parser_action_row1564[] = { 1, -1, 1, 84 }; -static int parser_action_row1563[] = { +static int parser_action_row1565[] = { 1, -1, 1, 73 }; -static int parser_action_row1564[] = { +static int parser_action_row1566[] = { 32, -1, 1, 362, 0, 0, 1, 1, 0, 2, - 9, 0, 783, - 12, 0, 666, - 15, 0, 667, - 18, 0, 668, - 25, 0, 669, - 28, 0, 671, - 29, 0, 672, - 30, 0, 673, - 36, 0, 674, - 37, 0, 675, - 38, 0, 676, - 39, 0, 677, - 40, 0, 678, + 9, 0, 785, + 12, 0, 668, + 15, 0, 669, + 18, 0, 670, + 25, 0, 671, + 28, 0, 673, + 29, 0, 674, + 30, 0, 675, + 36, 0, 676, + 37, 0, 677, + 38, 0, 678, + 39, 0, 679, + 40, 0, 680, 41, 0, 41, 45, 0, 42, 46, 0, 43, 47, 0, 44, 48, 0, 45, - 53, 0, 679, + 53, 0, 681, 54, 0, 47, 56, 0, 48, 83, 0, 49, @@ -15441,24 +15453,24 @@ static int parser_action_row1564[] = { 90, 0, 55, 93, 0, 56 }; -static int parser_action_row1565[] = { +static int parser_action_row1567[] = { 1, -1, 1, 451 }; -static int parser_action_row1566[] = { +static int parser_action_row1568[] = { 1, -1, 1, 143 }; -static int parser_action_row1567[] = { +static int parser_action_row1569[] = { 1, -1, 1, 680 }; -static int parser_action_row1568[] = { +static int parser_action_row1570[] = { 2, - -1, 3, 1567, + -1, 3, 1569, 52, 0, 172 }; -static int parser_action_row1569[] = { +static int parser_action_row1571[] = { 2, -1, 1, 236, 27, 1, 678 @@ -17033,7 +17045,9 @@ const int* const parser_action_table[] = { parser_action_row1566, parser_action_row1567, parser_action_row1568, - parser_action_row1569 + parser_action_row1569, + parser_action_row1570, + parser_action_row1571 }; static int parser_goto_row1[] = { @@ -17078,8 +17092,8 @@ static int parser_goto_row5[] = { 101, 234, 102, 236, 104, 237, - 230, 390, - 235, 392 + 230, 391, + 235, 393 }; static int parser_goto_row6[] = { 1, @@ -17091,165 +17105,165 @@ static int parser_goto_row7[] = { }; static int parser_goto_row8[] = { 9, - -1, 1052, + -1, 1054, 12, 58, 22, 58, 92, 232, 96, 232, - 1053, 1183, - 1054, 1185, - 1184, 1301, - 1417, 1457 + 1055, 1185, + 1056, 1187, + 1186, 1303, + 1419, 1459 }; static int parser_goto_row9[] = { 1, - -1, 364 + -1, 365 }; static int parser_goto_row10[] = { 1, - -1, 757 + -1, 759 }; static int parser_goto_row11[] = { 2, - -1, 1174, - 1176, 1287 + -1, 1176, + 1178, 1289 }; static int parser_goto_row12[] = { 2, - -1, 1043, - 1285, 1360 + -1, 1045, + 1287, 1362 }; static int parser_goto_row13[] = { 5, - -1, 888, - 894, 1056, - 1046, 1056, - 1064, 1056, - 1194, 1056 + -1, 890, + 896, 1058, + 1048, 1058, + 1066, 1058, + 1196, 1058 }; static int parser_goto_row14[] = { 9, - -1, 889, - 895, 1059, - 1047, 1059, - 1058, 1059, - 1065, 1059, - 1179, 1059, - 1195, 1059, - 1198, 1059, - 1309, 1059 + -1, 891, + 897, 1061, + 1049, 1061, + 1060, 1061, + 1067, 1061, + 1181, 1061, + 1197, 1061, + 1200, 1061, + 1311, 1061 }; static int parser_goto_row15[] = { 1, - -1, 890 + -1, 892 }; static int parser_goto_row16[] = { 8, - -1, 395, - 620, 745, - 1292, 1363, - 1412, 1449, - 1417, 1458, - 1459, 1501, - 1528, 1548, - 1549, 1560 + -1, 396, + 622, 747, + 1294, 1365, + 1414, 1451, + 1419, 1460, + 1461, 1503, + 1530, 1550, + 1551, 1562 }; static int parser_goto_row17[] = { 4, - -1, 752, - 1367, 1416, - 1411, 1446, - 1413, 1451 + -1, 754, + 1369, 1418, + 1413, 1448, + 1415, 1453 }; static int parser_goto_row18[] = { 1, - -1, 1053 + -1, 1055 }; static int parser_goto_row19[] = { 3, - -1, 1054, - 1053, 1184, - 1417, 1459 + -1, 1056, + 1055, 1186, + 1419, 1461 }; static int parser_goto_row20[] = { 7, -1, 202, - 232, 391, - 1052, 1182, - 1183, 1300, + 232, 392, + 1054, 1184, 1185, 1302, - 1301, 1373, - 1457, 1499 + 1187, 1304, + 1303, 1375, + 1459, 1501 }; static int parser_goto_row21[] = { 6, - -1, 1031, - 362, 504, - 1167, 1281, - 1293, 1364, + -1, 1033, + 363, 506, + 1169, 1283, 1295, 1366, - 1299, 1370 + 1297, 1368, + 1301, 1372 }; static int parser_goto_row22[] = { 6, - -1, 625, - 1295, 1367, - 1299, 1371, - 1364, 1411, + -1, 627, + 1297, 1369, + 1301, 1373, 1366, 1413, - 1370, 1419 + 1368, 1415, + 1372, 1421 }; static int parser_goto_row23[] = { 1, - -1, 876 + -1, 878 }; static int parser_goto_row24[] = { 2, - -1, 1027, - 1029, 1162 + -1, 1029, + 1031, 1164 }; static int parser_goto_row25[] = { 2, - -1, 877, - 1161, 1277 + -1, 879, + 1163, 1279 }; static int parser_goto_row26[] = { 8, - -1, 753, - 1037, 1168, - 1411, 1447, - 1421, 1465, - 1462, 1505, - 1506, 1533, - 1522, 1545, - 1531, 1550 + -1, 755, + 1039, 1170, + 1413, 1449, + 1423, 1467, + 1464, 1507, + 1508, 1535, + 1524, 1547, + 1533, 1552 }; static int parser_goto_row27[] = { 2, - -1, 1165, - 1166, 1279 + -1, 1167, + 1168, 1281 }; static int parser_goto_row28[] = { 2, - -1, 1032, - 1278, 1358 + -1, 1034, + 1280, 1360 }; static int parser_goto_row29[] = { 1, - -1, 1033 + -1, 1035 }; static int parser_goto_row30[] = { 1, - -1, 1034 + -1, 1036 }; static int parser_goto_row31[] = { 6, - -1, 1037, - 1371, 1421, - 1419, 1462, - 1464, 1506, - 1489, 1522, - 1504, 1531 + -1, 1039, + 1373, 1423, + 1421, 1464, + 1466, 1508, + 1491, 1524, + 1506, 1533 }; static int parser_goto_row32[] = { 1, @@ -17257,23 +17271,23 @@ static int parser_goto_row32[] = { }; static int parser_goto_row33[] = { 10, - -1, 1282, + -1, 1284, 12, 60, 22, 60, 92, 60, - 753, 886, - 757, 891, - 896, 1061, - 1447, 1492, - 1465, 1507, - 1505, 1532 + 755, 888, + 759, 893, + 898, 1063, + 1449, 1494, + 1467, 1509, + 1507, 1534 }; static int parser_goto_row34[] = { 4, - -1, 1283, - 1533, 1551, - 1545, 1559, - 1550, 1561 + -1, 1285, + 1535, 1553, + 1547, 1561, + 1552, 1563 }; static int parser_goto_row35[] = { 5, @@ -17285,91 +17299,91 @@ static int parser_goto_row35[] = { }; static int parser_goto_row36[] = { 24, - -1, 708, - 189, 348, - 416, 546, - 432, 565, - 452, 582, - 609, 722, - 748, 878, - 774, 912, - 802, 947, - 836, 972, - 879, 1035, - 899, 1068, - 932, 1086, - 966, 1114, - 975, 722, - 1055, 912, - 1074, 1204, - 1075, 722, - 1181, 1292, - 1278, 1035, - 1303, 722, - 1359, 1410, - 1441, 1482, - 1443, 1486 + -1, 710, + 189, 349, + 417, 548, + 433, 567, + 454, 584, + 611, 724, + 750, 880, + 776, 914, + 804, 949, + 838, 974, + 881, 1037, + 901, 1070, + 934, 1088, + 968, 1116, + 977, 724, + 1057, 914, + 1076, 1206, + 1077, 724, + 1183, 1294, + 1280, 1037, + 1305, 724, + 1361, 1412, + 1443, 1484, + 1445, 1488 }; static int parser_goto_row37[] = { 4, - -1, 709, - 612, 739, - 707, 822, - 738, 842 + -1, 711, + 614, 741, + 709, 824, + 740, 844 }; static int parser_goto_row38[] = { 2, - -1, 824, - 825, 967 + -1, 826, + 827, 969 }; static int parser_goto_row39[] = { 5, - -1, 626, - 875, 1022, - 1023, 1158, - 1025, 1159, - 1365, 1412 + -1, 628, + 877, 1024, + 1025, 1160, + 1027, 1161, + 1367, 1414 }; static int parser_goto_row40[] = { 11, -1, 291, - 292, 434, - 788, 936, - 937, 1088, - 1042, 1171, - 1172, 1284, - 1368, 1417, - 1369, 1418, - 1422, 1466, + 292, 435, + 790, 938, + 939, 1090, + 1044, 1173, + 1174, 1286, + 1370, 1419, + 1371, 1420, 1424, 1468, - 1467, 1509 + 1426, 1470, + 1469, 1511 }; static int parser_goto_row41[] = { 24, -1, 142, 33, 149, - 335, 468, - 466, 598, - 569, 697, - 670, 790, - 672, 149, - 751, 884, - 813, 959, - 885, 1041, - 946, 468, - 1093, 598, - 1111, 1234, - 1219, 697, - 1389, 959, - 1415, 1454, - 1437, 1477, - 1445, 1490, - 1450, 1493, - 1455, 1497, - 1476, 1234, - 1491, 1524, - 1494, 1526, - 1563, 1477 + 336, 470, + 468, 600, + 571, 699, + 672, 792, + 674, 149, + 753, 886, + 815, 961, + 887, 1043, + 948, 470, + 1095, 600, + 1113, 1236, + 1221, 699, + 1391, 961, + 1417, 1456, + 1439, 1479, + 1447, 1492, + 1452, 1495, + 1457, 1499, + 1478, 1236, + 1493, 1526, + 1496, 1528, + 1565, 1479 }; static int parser_goto_row42[] = { 1, @@ -17378,21 +17392,21 @@ static int parser_goto_row42[] = { static int parser_goto_row43[] = { 2, -1, 62, - 686, 810 + 688, 812 }; static int parser_goto_row44[] = { 4, -1, 287, - 469, 600, - 784, 934, - 1095, 1224 + 471, 602, + 786, 936, + 1097, 1226 }; static int parser_goto_row45[] = { 4, -1, 204, - 206, 366, - 431, 366, - 958, 366 + 206, 367, + 432, 367, + 960, 367 }; static int parser_goto_row46[] = { 16, @@ -17402,16 +17416,16 @@ static int parser_goto_row46[] = { 92, 63, 96, 63, 144, 288, - 205, 365, - 367, 365, - 430, 365, - 469, 288, - 564, 365, - 568, 680, - 686, 811, - 784, 288, - 1095, 288, - 1218, 680 + 205, 366, + 368, 366, + 431, 366, + 471, 288, + 566, 366, + 570, 682, + 688, 813, + 786, 288, + 1097, 288, + 1220, 682 }; static int parser_goto_row47[] = { 18, @@ -17419,20 +17433,20 @@ static int parser_goto_row47[] = { 38, 175, 145, 289, 150, 295, - 675, 796, - 676, 798, - 698, 816, - 717, 832, - 718, 834, - 787, 935, - 793, 940, - 907, 1070, - 908, 1072, - 1235, 1344, - 1333, 1390, - 1478, 1515, - 1514, 1538, - 1567, 1568 + 677, 798, + 678, 800, + 700, 818, + 719, 834, + 720, 836, + 789, 937, + 795, 942, + 909, 1072, + 910, 1074, + 1237, 1346, + 1335, 1392, + 1480, 1517, + 1516, 1540, + 1569, 1570 }; static int parser_goto_row48[] = { 1, @@ -17441,48 +17455,48 @@ static int parser_goto_row48[] = { static int parser_goto_row49[] = { 7, -1, 64, - 609, 723, - 774, 913, - 975, 723, - 1055, 913, - 1075, 723, - 1303, 723 + 611, 725, + 776, 915, + 977, 725, + 1057, 915, + 1077, 725, + 1305, 725 }; static int parser_goto_row50[] = { 5, -1, 65, - 609, 724, - 975, 724, - 1075, 724, - 1303, 724 + 611, 726, + 977, 726, + 1077, 726, + 1305, 726 }; static int parser_goto_row51[] = { 15, - -1, 373, - 219, 382, - 220, 384, - 636, 764, - 637, 766, - 804, 950, - 806, 953, - 807, 955, - 1077, 1207, - 1078, 1209, - 1080, 1212, - 1227, 1337, - 1228, 1339, - 1384, 1430, - 1385, 1432 + -1, 374, + 219, 383, + 220, 385, + 638, 766, + 639, 768, + 806, 952, + 808, 955, + 809, 957, + 1079, 1209, + 1080, 1211, + 1082, 1214, + 1229, 1339, + 1230, 1341, + 1386, 1432, + 1387, 1434 }; static int parser_goto_row52[] = { 7, -1, 66, - 609, 725, - 774, 914, - 975, 725, - 1055, 914, - 1075, 725, - 1303, 725 + 611, 727, + 776, 916, + 977, 727, + 1057, 916, + 1077, 727, + 1305, 727 }; static int parser_goto_row53[] = { 1, @@ -17490,54 +17504,54 @@ static int parser_goto_row53[] = { }; static int parser_goto_row54[] = { 3, - -1, 681, - 686, 812, - 810, 957 + -1, 683, + 688, 814, + 812, 959 }; static int parser_goto_row55[] = { 7, -1, 68, - 609, 726, - 774, 915, - 975, 726, - 1055, 915, - 1075, 726, - 1303, 726 + 611, 728, + 776, 917, + 977, 728, + 1057, 917, + 1077, 728, + 1305, 728 }; static int parser_goto_row56[] = { 7, -1, 69, - 609, 727, - 774, 916, - 975, 727, - 1055, 916, - 1075, 727, - 1303, 727 + 611, 729, + 776, 918, + 977, 729, + 1057, 918, + 1077, 729, + 1305, 729 }; static int parser_goto_row57[] = { 7, -1, 70, - 609, 728, - 774, 917, - 975, 728, - 1055, 917, - 1075, 728, - 1303, 728 + 611, 730, + 776, 919, + 977, 730, + 1057, 919, + 1077, 730, + 1305, 730 }; static int parser_goto_row58[] = { 7, -1, 71, - 609, 729, - 774, 918, - 975, 729, - 1055, 918, - 1075, 729, - 1303, 729 + 611, 731, + 776, 920, + 977, 731, + 1057, 920, + 1077, 731, + 1305, 731 }; static int parser_goto_row59[] = { 2, -1, 178, - 678, 800 + 680, 802 }; static int parser_goto_row60[] = { 61, @@ -17545,63 +17559,63 @@ static int parser_goto_row60[] = { 37, 174, 38, 176, 40, 179, - 173, 330, - 175, 331, - 178, 333, - 370, 513, - 373, 514, - 381, 518, - 382, 519, - 383, 520, - 384, 521, - 482, 613, - 566, 663, - 664, 781, - 675, 174, - 676, 176, - 678, 179, - 716, 831, - 717, 833, - 718, 835, - 763, 900, - 764, 901, + 173, 331, + 175, 332, + 178, 334, + 371, 515, + 374, 516, + 382, 520, + 383, 521, + 384, 522, + 385, 523, + 484, 615, + 568, 665, + 666, 783, + 677, 174, + 678, 176, + 680, 179, + 718, 833, + 719, 835, + 720, 837, 765, 902, 766, 903, - 796, 330, + 767, 904, + 768, 905, 798, 331, - 800, 333, - 832, 970, - 834, 971, - 906, 1069, - 907, 1071, - 908, 1073, - 949, 513, - 950, 514, - 952, 518, - 953, 519, + 800, 332, + 802, 334, + 834, 972, + 836, 973, + 908, 1071, + 909, 1073, + 910, 1075, + 951, 515, + 952, 516, 954, 520, 955, 521, - 1070, 1202, - 1072, 1203, - 1097, 613, - 1117, 1238, - 1206, 1318, - 1207, 1319, + 956, 522, + 957, 523, + 1072, 1204, + 1074, 1205, + 1099, 615, + 1119, 1240, 1208, 1320, 1209, 1321, - 1211, 1324, - 1212, 1325, - 1216, 663, - 1316, 1381, - 1330, 781, - 1336, 900, - 1337, 901, + 1210, 1322, + 1211, 1323, + 1213, 1326, + 1214, 1327, + 1218, 665, + 1318, 1383, + 1332, 783, 1338, 902, 1339, 903, - 1429, 1471, - 1430, 1472, + 1340, 904, + 1341, 905, 1431, 1473, - 1432, 1474 + 1432, 1474, + 1433, 1475, + 1434, 1476 }; static int parser_goto_row61[] = { 58, @@ -17610,59 +17624,59 @@ static int parser_goto_row61[] = { 147, 293, 148, 294, 178, 180, - 190, 349, - 191, 350, - 216, 378, - 244, 398, - 255, 406, - 299, 439, - 368, 406, - 374, 515, - 397, 406, - 522, 406, - 609, 730, - 674, 180, - 675, 180, + 190, 350, + 191, 351, + 216, 379, + 244, 399, + 255, 407, + 300, 441, + 369, 407, + 375, 517, + 398, 407, + 524, 407, + 611, 732, 676, 180, + 677, 180, 678, 180, - 700, 818, - 741, 844, - 776, 929, - 789, 938, - 791, 939, - 796, 180, + 680, 180, + 702, 820, + 743, 846, + 778, 931, + 791, 940, + 793, 941, 798, 180, 800, 180, - 820, 964, - 949, 180, - 950, 180, + 802, 180, + 822, 966, + 951, 180, 952, 180, - 953, 180, 954, 180, 955, 180, - 975, 730, - 981, 1123, - 992, 1132, - 1075, 730, - 1097, 180, - 1216, 180, - 1233, 1343, - 1303, 730, - 1330, 180, - 1335, 1392, - 1336, 180, - 1337, 180, + 956, 180, + 957, 180, + 977, 732, + 983, 1125, + 994, 1134, + 1077, 732, + 1099, 180, + 1218, 180, + 1235, 1345, + 1305, 732, + 1332, 180, + 1337, 1394, 1338, 180, 1339, 180, - 1345, 1399, - 1400, 1438, - 1498, 1528, - 1502, 1530, - 1512, 1537, - 1529, 1549, - 1534, 1552, + 1340, 180, + 1341, 180, + 1347, 1401, + 1402, 1440, + 1500, 1530, + 1504, 1532, + 1514, 1539, + 1531, 1551, 1536, 1554, - 1553, 1562 + 1538, 1556, + 1555, 1564 }; static int parser_goto_row62[] = { 1, @@ -17671,11 +17685,11 @@ static int parser_goto_row62[] = { static int parser_goto_row63[] = { 6, -1, 163, - 300, 440, - 446, 576, + 301, 442, 448, 578, - 449, 579, - 577, 704 + 450, 580, + 451, 581, + 579, 706 }; static int parser_goto_row64[] = { 1, @@ -17684,30 +17698,30 @@ static int parser_goto_row64[] = { static int parser_goto_row65[] = { 10, -1, 165, - 450, 580, - 451, 581, - 455, 585, - 456, 586, + 452, 582, + 453, 583, 457, 587, 458, 588, 459, 589, 460, 590, - 461, 591 + 461, 591, + 462, 592, + 463, 593 }; static int parser_goto_row66[] = { 3, -1, 166, - 453, 583, - 454, 584 + 455, 585, + 456, 586 }; static int parser_goto_row67[] = { 6, -1, 167, - 302, 442, - 305, 445, - 462, 592, - 463, 593, - 464, 594 + 303, 444, + 306, 447, + 464, 594, + 465, 595, + 466, 596 }; static int parser_goto_row68[] = { 1, @@ -17723,44 +17737,44 @@ static int parser_goto_row69[] = { 92, 72, 96, 72, 144, 72, - 158, 303, + 158, 304, 205, 72, - 335, 72, - 367, 72, - 430, 72, - 466, 72, - 469, 72, - 564, 72, - 568, 682, - 569, 72, - 609, 731, - 667, 682, - 670, 72, - 672, 682, - 686, 72, - 751, 72, - 784, 72, - 813, 72, - 885, 72, - 946, 682, - 975, 731, - 1075, 731, - 1093, 682, - 1095, 72, - 1111, 72, - 1218, 682, - 1219, 682, - 1303, 731, - 1389, 682, - 1415, 72, - 1437, 72, - 1445, 72, - 1450, 72, - 1455, 72, - 1476, 682, - 1491, 72, - 1494, 72, - 1563, 682 + 336, 72, + 368, 72, + 431, 72, + 468, 72, + 471, 72, + 566, 72, + 570, 684, + 571, 72, + 611, 733, + 669, 684, + 672, 72, + 674, 684, + 688, 72, + 753, 72, + 786, 72, + 815, 72, + 887, 72, + 948, 684, + 977, 733, + 1077, 733, + 1095, 684, + 1097, 72, + 1113, 72, + 1220, 684, + 1221, 684, + 1305, 733, + 1391, 684, + 1417, 72, + 1439, 72, + 1447, 72, + 1452, 72, + 1457, 72, + 1478, 684, + 1493, 72, + 1496, 72, + 1565, 684 }; static int parser_goto_row70[] = { 72, @@ -17774,13 +17788,12 @@ static int parser_goto_row70[] = { 245, 125, 247, 125, 256, 125, - 388, 125, - 410, 125, - 412, 125, + 389, 125, + 411, 125, 413, 125, 414, 125, 415, 125, - 417, 125, + 416, 125, 418, 125, 419, 125, 420, 125, @@ -17792,50 +17805,51 @@ static int parser_goto_row70[] = { 426, 125, 427, 125, 428, 125, - 507, 125, - 510, 125, - 541, 125, - 639, 125, - 640, 125, - 666, 125, - 684, 125, - 742, 862, - 769, 125, - 774, 125, - 805, 125, - 809, 125, - 814, 125, - 854, 862, - 961, 125, - 982, 862, - 984, 862, - 993, 862, - 1055, 125, - 1098, 125, + 429, 125, + 509, 125, + 512, 125, + 543, 125, + 641, 125, + 642, 125, + 668, 125, + 686, 125, + 744, 864, + 771, 125, + 776, 125, + 807, 125, + 811, 125, + 816, 125, + 856, 864, + 963, 125, + 984, 864, + 986, 864, + 995, 864, + 1057, 125, 1100, 125, - 1137, 862, - 1139, 862, - 1140, 862, - 1141, 862, - 1142, 862, - 1144, 862, - 1145, 862, - 1146, 862, - 1147, 862, - 1148, 862, - 1149, 862, - 1150, 862, - 1151, 862, - 1152, 862, - 1153, 862, - 1154, 862, - 1155, 862, - 1230, 125, - 1231, 125, - 1251, 862, - 1326, 125, - 1342, 125, - 1539, 862 + 1102, 125, + 1139, 864, + 1141, 864, + 1142, 864, + 1143, 864, + 1144, 864, + 1146, 864, + 1147, 864, + 1148, 864, + 1149, 864, + 1150, 864, + 1151, 864, + 1152, 864, + 1153, 864, + 1154, 864, + 1155, 864, + 1156, 864, + 1157, 864, + 1232, 125, + 1233, 125, + 1253, 864, + 1328, 125, + 1344, 125, + 1541, 864 }; static int parser_goto_row71[] = { 1, @@ -17848,7 +17862,7 @@ static int parser_goto_row72[] = { static int parser_goto_row73[] = { 2, -1, 212, - 215, 376 + 215, 377 }; static int parser_goto_row74[] = { 1, @@ -17857,27 +17871,27 @@ static int parser_goto_row74[] = { static int parser_goto_row75[] = { 2, -1, 214, - 215, 377 + 215, 378 }; static int parser_goto_row76[] = { 13, -1, 184, 146, 292, - 609, 732, - 774, 919, - 788, 937, - 875, 1023, - 975, 732, - 1042, 1172, - 1055, 1187, - 1075, 732, - 1303, 732, - 1317, 1382, - 1425, 1469 + 611, 734, + 776, 921, + 790, 939, + 877, 1025, + 977, 734, + 1044, 1174, + 1057, 1189, + 1077, 734, + 1305, 734, + 1319, 1384, + 1427, 1471 }; static int parser_goto_row77[] = { 43, - -1, 481, + -1, 483, 42, 185, 43, 186, 44, 187, @@ -17897,86 +17911,86 @@ static int parser_goto_row77[] = { 122, 259, 123, 260, 124, 261, - 214, 375, - 345, 478, - 377, 516, - 479, 611, - 614, 740, - 850, 985, - 851, 986, + 214, 376, + 346, 480, + 378, 518, + 481, 613, + 616, 742, 852, 987, 853, 988, - 857, 994, - 858, 995, + 854, 989, + 855, 990, 859, 996, 860, 997, 861, 998, - 875, 1024, - 974, 1119, - 978, 1122, - 1121, 1239, - 1135, 1248, - 1136, 1249, - 1257, 1353, - 1350, 1403, - 1352, 1404 + 862, 999, + 863, 1000, + 877, 1026, + 976, 1121, + 980, 1124, + 1123, 1241, + 1137, 1250, + 1138, 1251, + 1259, 1355, + 1352, 1405, + 1354, 1406 }; static int parser_goto_row78[] = { 3, - -1, 526, - 183, 344, - 771, 905 + -1, 528, + 183, 345, + 773, 907 }; static int parser_goto_row79[] = { 3, - -1, 882, - 394, 527, - 1414, 1452 + -1, 884, + 395, 529, + 1416, 1454 }; static int parser_goto_row80[] = { 3, - -1, 528, - 476, 608, - 710, 827 + -1, 530, + 478, 610, + 712, 829 }; static int parser_goto_row81[] = { 3, - -1, 649, - 883, 1038, - 1453, 1495 + -1, 651, + 885, 1040, + 1455, 1497 }; static int parser_goto_row82[] = { 2, - -1, 650, - 652, 775 + -1, 652, + 654, 777 }; static int parser_goto_row83[] = { 2, - -1, 647, - 648, 772 + -1, 649, + 650, 774 }; static int parser_goto_row84[] = { 3, - -1, 733, - 1075, 1205, - 1303, 1375 + -1, 735, + 1077, 1207, + 1305, 1377 }; static int parser_goto_row85[] = { 3, - -1, 840, - 841, 976, - 1082, 976 + -1, 842, + 843, 978, + 1084, 978 }; static int parser_goto_row86[] = { 2, - -1, 734, - 975, 1120 + -1, 736, + 977, 1122 }; static int parser_goto_row87[] = { 3, - -1, 345, - 472, 605, - 651, 774 + -1, 346, + 474, 607, + 653, 776 }; static int parser_goto_row88[] = { 33, @@ -17984,96 +17998,96 @@ static int parser_goto_row88[] = { 78, 220, 108, 243, 129, 264, - 171, 328, - 218, 379, - 262, 409, - 326, 379, - 400, 535, - 441, 574, - 507, 633, - 510, 637, - 559, 658, - 562, 661, - 595, 633, - 597, 706, - 684, 807, - 712, 828, - 736, 220, - 777, 930, - 805, 379, - 845, 980, - 864, 1001, - 921, 1078, - 999, 1134, - 1098, 633, - 1100, 1228, - 1118, 637, - 1127, 1244, - 1271, 1354, - 1274, 1357, - 1323, 1385, - 1401, 1439 + 171, 329, + 218, 380, + 262, 410, + 327, 380, + 401, 537, + 443, 576, + 509, 635, + 512, 639, + 561, 660, + 564, 663, + 597, 635, + 599, 708, + 686, 809, + 714, 830, + 738, 220, + 779, 932, + 807, 380, + 847, 982, + 866, 1003, + 923, 1080, + 1001, 1136, + 1100, 635, + 1102, 1230, + 1120, 639, + 1129, 1246, + 1273, 1356, + 1276, 1359, + 1325, 1387, + 1403, 1441 }; static int parser_goto_row89[] = { 22, -1, 127, 78, 221, - 218, 380, - 222, 386, - 224, 387, - 388, 523, - 507, 634, - 510, 638, - 639, 767, - 640, 768, - 666, 782, - 684, 808, - 769, 904, - 805, 951, - 809, 956, - 814, 960, - 961, 1109, - 1098, 1226, - 1100, 1229, - 1230, 1340, - 1231, 1341, - 1342, 1397 + 218, 381, + 222, 387, + 224, 388, + 389, 525, + 509, 636, + 512, 640, + 641, 769, + 642, 770, + 668, 784, + 686, 810, + 771, 906, + 807, 953, + 811, 958, + 816, 962, + 963, 1111, + 1100, 1228, + 1102, 1231, + 1232, 1342, + 1233, 1343, + 1344, 1399 }; static int parser_goto_row90[] = { 9, -1, 76, 72, 209, 139, 284, - 169, 325, + 169, 326, 254, 284, - 303, 325, - 682, 804, - 731, 209, - 925, 1080 + 304, 326, + 684, 806, + 733, 209, + 927, 1082 }; static int parser_goto_row91[] = { 4, - -1, 351, - 255, 407, - 397, 532, - 522, 644 + -1, 352, + 255, 408, + 398, 534, + 524, 646 }; static int parser_goto_row92[] = { 2, - -1, 617, - 618, 743 + -1, 619, + 620, 745 }; static int parser_goto_row93[] = { 4, -1, 298, - 437, 570, - 794, 942, - 1091, 1220 + 438, 572, + 796, 944, + 1093, 1222 }; static int parser_goto_row94[] = { 2, -1, 240, - 486, 620 + 488, 622 }; static int parser_goto_row95[] = { 127, @@ -18088,7 +18102,7 @@ static int parser_goto_row95[] = { 96, 77, 117, 253, 144, 77, - 158, 304, + 158, 305, 205, 77, 218, 128, 222, 128, @@ -18096,16 +18110,15 @@ static int parser_goto_row95[] = { 245, 128, 247, 128, 256, 128, - 335, 77, - 367, 77, - 369, 509, - 388, 128, - 410, 128, - 412, 128, + 336, 77, + 368, 77, + 370, 511, + 389, 128, + 411, 128, 413, 128, 414, 128, 415, 128, - 417, 128, + 416, 128, 418, 128, 419, 128, 420, 128, @@ -18117,93 +18130,94 @@ static int parser_goto_row95[] = { 426, 128, 427, 128, 428, 128, - 429, 561, - 430, 77, - 465, 596, - 466, 77, - 469, 77, - 507, 128, - 510, 128, - 537, 656, - 541, 128, - 564, 77, - 568, 683, - 569, 77, - 575, 703, - 609, 735, - 639, 128, - 640, 128, - 666, 128, - 667, 683, - 670, 77, - 672, 683, - 684, 128, - 686, 77, - 742, 863, - 751, 77, - 769, 128, - 774, 920, - 784, 77, - 805, 128, - 809, 128, - 813, 77, - 814, 128, - 854, 990, - 885, 77, - 946, 683, - 948, 1099, - 961, 128, - 973, 509, - 975, 735, - 982, 863, - 984, 863, - 993, 863, - 1055, 920, - 1075, 735, - 1093, 683, - 1095, 77, - 1098, 128, + 429, 128, + 430, 563, + 431, 77, + 467, 598, + 468, 77, + 471, 77, + 509, 128, + 512, 128, + 539, 658, + 543, 128, + 566, 77, + 570, 685, + 571, 77, + 577, 705, + 611, 737, + 641, 128, + 642, 128, + 668, 128, + 669, 685, + 672, 77, + 674, 685, + 686, 128, + 688, 77, + 744, 865, + 753, 77, + 771, 128, + 776, 922, + 786, 77, + 807, 128, + 811, 128, + 815, 77, + 816, 128, + 856, 992, + 887, 77, + 948, 685, + 950, 1101, + 963, 128, + 975, 511, + 977, 737, + 984, 865, + 986, 865, + 995, 865, + 1057, 922, + 1077, 737, + 1095, 685, + 1097, 77, 1100, 128, - 1111, 77, - 1137, 863, - 1139, 863, - 1140, 863, - 1141, 863, - 1142, 863, - 1144, 863, - 1145, 863, - 1146, 863, - 1147, 863, - 1148, 863, - 1149, 863, - 1150, 863, - 1151, 863, - 1152, 863, - 1153, 863, - 1154, 863, - 1155, 863, - 1156, 1273, - 1210, 1322, - 1218, 683, - 1219, 683, - 1230, 128, - 1231, 128, - 1246, 1349, - 1251, 863, - 1303, 735, - 1326, 128, - 1342, 128, - 1389, 683, - 1415, 77, - 1437, 77, - 1445, 77, - 1450, 77, - 1455, 77, - 1476, 683, - 1491, 77, - 1494, 77, - 1539, 863, - 1563, 683 + 1102, 128, + 1113, 77, + 1139, 865, + 1141, 865, + 1142, 865, + 1143, 865, + 1144, 865, + 1146, 865, + 1147, 865, + 1148, 865, + 1149, 865, + 1150, 865, + 1151, 865, + 1152, 865, + 1153, 865, + 1154, 865, + 1155, 865, + 1156, 865, + 1157, 865, + 1158, 1275, + 1212, 1324, + 1220, 685, + 1221, 685, + 1232, 128, + 1233, 128, + 1248, 1351, + 1253, 865, + 1305, 737, + 1328, 128, + 1344, 128, + 1391, 685, + 1417, 77, + 1439, 77, + 1447, 77, + 1452, 77, + 1457, 77, + 1478, 685, + 1493, 77, + 1496, 77, + 1541, 865, + 1565, 685 }; static int parser_goto_row96[] = { 129, @@ -18225,16 +18239,15 @@ static int parser_goto_row96[] = { 245, 129, 247, 129, 256, 129, - 335, 78, - 367, 78, - 369, 510, - 388, 129, - 410, 129, - 412, 129, + 336, 78, + 368, 78, + 370, 512, + 389, 129, + 411, 129, 413, 129, 414, 129, 415, 129, - 417, 129, + 416, 129, 418, 129, 419, 129, 420, 129, @@ -18246,100 +18259,101 @@ static int parser_goto_row96[] = { 426, 129, 427, 129, 428, 129, - 429, 562, - 430, 78, - 465, 597, - 466, 78, - 469, 78, - 507, 129, - 510, 129, - 537, 562, - 541, 129, - 564, 78, - 568, 684, - 569, 78, - 575, 597, - 607, 712, - 609, 736, - 639, 129, - 640, 129, - 655, 777, - 666, 129, - 667, 684, - 670, 78, - 672, 684, - 684, 129, - 686, 78, - 742, 864, - 751, 78, - 769, 129, - 774, 921, - 784, 78, - 805, 129, - 809, 129, - 813, 78, - 814, 129, - 854, 864, - 885, 78, - 946, 684, - 948, 1100, - 961, 129, - 973, 1118, - 975, 736, - 982, 864, - 984, 864, - 993, 864, - 1055, 921, - 1075, 736, - 1093, 684, - 1095, 78, - 1098, 129, + 429, 129, + 430, 564, + 431, 78, + 467, 599, + 468, 78, + 471, 78, + 509, 129, + 512, 129, + 539, 564, + 543, 129, + 566, 78, + 570, 686, + 571, 78, + 577, 599, + 609, 714, + 611, 738, + 641, 129, + 642, 129, + 657, 779, + 668, 129, + 669, 686, + 672, 78, + 674, 686, + 686, 129, + 688, 78, + 744, 866, + 753, 78, + 771, 129, + 776, 923, + 786, 78, + 807, 129, + 811, 129, + 815, 78, + 816, 129, + 856, 866, + 887, 78, + 948, 686, + 950, 1102, + 963, 129, + 975, 1120, + 977, 738, + 984, 866, + 986, 866, + 995, 866, + 1057, 923, + 1077, 738, + 1095, 686, + 1097, 78, 1100, 129, - 1111, 78, - 1137, 864, - 1139, 864, - 1140, 864, - 1141, 864, - 1142, 864, - 1144, 864, - 1145, 864, - 1146, 864, - 1147, 864, - 1148, 864, - 1149, 864, - 1150, 864, - 1151, 864, - 1152, 864, - 1153, 864, - 1154, 864, - 1155, 864, - 1156, 1274, - 1210, 1323, - 1218, 684, - 1219, 684, - 1230, 129, - 1231, 129, - 1246, 1274, - 1251, 864, - 1303, 736, - 1326, 129, - 1342, 129, - 1348, 1401, - 1389, 684, - 1415, 78, - 1437, 78, - 1445, 78, - 1450, 78, - 1455, 78, - 1476, 684, - 1491, 78, - 1494, 78, - 1539, 864, - 1563, 684 + 1102, 129, + 1113, 78, + 1139, 866, + 1141, 866, + 1142, 866, + 1143, 866, + 1144, 866, + 1146, 866, + 1147, 866, + 1148, 866, + 1149, 866, + 1150, 866, + 1151, 866, + 1152, 866, + 1153, 866, + 1154, 866, + 1155, 866, + 1156, 866, + 1157, 866, + 1158, 1276, + 1212, 1325, + 1220, 686, + 1221, 686, + 1232, 129, + 1233, 129, + 1248, 1276, + 1253, 866, + 1305, 738, + 1328, 129, + 1344, 129, + 1350, 1403, + 1391, 686, + 1417, 78, + 1439, 78, + 1447, 78, + 1452, 78, + 1457, 78, + 1478, 686, + 1493, 78, + 1496, 78, + 1541, 866, + 1565, 686 }; static int parser_goto_row97[] = { 1, - -1, 630 + -1, 632 }; static int parser_goto_row98[] = { 10, @@ -18347,12 +18361,12 @@ static int parser_goto_row98[] = { 81, 226, 140, 226, 241, 226, - 512, 226, - 525, 226, - 632, 226, - 696, 226, - 714, 226, - 1102, 226 + 514, 226, + 527, 226, + 634, 226, + 698, 226, + 716, 226, + 1104, 226 }; static int parser_goto_row99[] = { 54, @@ -18367,81 +18381,81 @@ static int parser_goto_row99[] = { 140, 285, 144, 80, 205, 80, - 335, 80, - 367, 80, - 369, 511, - 430, 80, - 466, 80, - 469, 80, - 506, 631, - 512, 641, - 564, 80, - 568, 685, - 569, 80, - 607, 713, - 632, 760, - 655, 713, - 667, 685, - 670, 80, - 672, 685, - 686, 80, - 696, 815, - 714, 829, - 751, 80, - 784, 80, - 813, 80, - 885, 80, - 946, 685, - 948, 1101, - 1093, 685, - 1095, 80, - 1102, 1232, - 1111, 80, - 1218, 685, - 1219, 685, - 1348, 713, - 1389, 685, - 1415, 80, - 1437, 80, - 1445, 80, - 1450, 80, - 1455, 80, - 1476, 685, - 1491, 80, - 1494, 80, - 1563, 685 + 336, 80, + 368, 80, + 370, 513, + 431, 80, + 468, 80, + 471, 80, + 508, 633, + 514, 643, + 566, 80, + 570, 687, + 571, 80, + 609, 715, + 634, 762, + 657, 715, + 669, 687, + 672, 80, + 674, 687, + 688, 80, + 698, 817, + 716, 831, + 753, 80, + 786, 80, + 815, 80, + 887, 80, + 948, 687, + 950, 1103, + 1095, 687, + 1097, 80, + 1104, 1234, + 1113, 80, + 1220, 687, + 1221, 687, + 1350, 715, + 1391, 687, + 1417, 80, + 1439, 80, + 1447, 80, + 1452, 80, + 1457, 80, + 1478, 687, + 1493, 80, + 1496, 80, + 1565, 687 }; static int parser_goto_row100[] = { 8, - -1, 1040, - 1041, 1170, - 1454, 1496, - 1490, 1523, - 1493, 1525, - 1497, 1527, - 1524, 1546, - 1526, 1547 + -1, 1042, + 1043, 1172, + 1456, 1498, + 1492, 1525, + 1495, 1527, + 1499, 1529, + 1526, 1548, + 1528, 1549 }; static int parser_goto_row101[] = { 18, - -1, 883, + -1, 885, 15, 85, - 394, 529, - 395, 530, - 619, 744, - 745, 874, - 774, 922, - 890, 1044, - 919, 1076, - 926, 1081, - 1055, 1188, - 1187, 1304, - 1189, 1305, - 1317, 1383, - 1382, 1428, - 1414, 1453, - 1425, 1470, - 1469, 1511 + 395, 531, + 396, 532, + 621, 746, + 747, 876, + 776, 924, + 892, 1046, + 921, 1078, + 928, 1083, + 1057, 1190, + 1189, 1306, + 1191, 1307, + 1319, 1385, + 1384, 1430, + 1416, 1455, + 1427, 1472, + 1471, 1513 }; static int parser_goto_row102[] = { 50, @@ -18463,41 +18477,41 @@ static int parser_goto_row102[] = { 101, 11, 102, 11, 104, 11, - 206, 367, + 206, 368, 230, 11, 235, 11, - 288, 430, - 335, 469, - 431, 564, - 466, 469, - 568, 686, - 569, 144, - 667, 784, - 670, 469, - 672, 784, - 751, 469, - 811, 205, - 813, 469, - 885, 469, - 946, 1095, - 958, 367, - 1093, 1095, - 1111, 144, - 1218, 686, - 1219, 784, - 1389, 1095, - 1415, 469, - 1437, 144, - 1445, 469, - 1450, 469, - 1455, 469, - 1476, 784, - 1491, 469, - 1494, 469, - 1563, 784 + 288, 431, + 336, 471, + 432, 566, + 468, 471, + 570, 688, + 571, 144, + 669, 786, + 672, 471, + 674, 786, + 753, 471, + 813, 205, + 815, 471, + 887, 471, + 948, 1097, + 960, 368, + 1095, 1097, + 1113, 144, + 1220, 688, + 1221, 786, + 1391, 1097, + 1417, 471, + 1439, 144, + 1447, 471, + 1452, 471, + 1457, 471, + 1478, 786, + 1493, 471, + 1496, 471, + 1565, 786 }; static int parser_goto_row103[] = { - 260, + 262, -1, 96, 0, 12, 4, 22, @@ -18509,6 +18523,7 @@ static int parser_goto_row103[] = { 31, 147, 32, 148, 34, 151, + 35, 152, 41, 182, 47, 190, 48, 191, @@ -18521,154 +18536,153 @@ static int parser_goto_row103[] = { 112, 247, 118, 255, 119, 256, - 154, 299, - 155, 300, - 156, 301, - 157, 302, - 159, 305, - 192, 352, - 193, 353, - 199, 354, - 200, 355, - 201, 356, - 207, 368, - 208, 369, - 213, 374, - 238, 393, - 242, 397, - 252, 402, - 265, 410, - 266, 412, - 267, 413, - 268, 414, - 269, 415, - 270, 416, - 271, 417, - 272, 418, - 273, 419, - 274, 420, - 275, 421, - 276, 422, - 277, 423, - 278, 424, - 279, 425, - 280, 426, - 281, 427, - 282, 428, - 283, 429, - 290, 432, - 293, 435, - 294, 436, - 296, 437, - 298, 438, - 306, 446, + 154, 300, + 155, 301, + 156, 302, + 157, 303, + 159, 306, + 192, 353, + 193, 354, + 199, 355, + 200, 356, + 201, 357, + 207, 369, + 208, 370, + 213, 375, + 238, 394, + 242, 398, + 252, 403, + 265, 411, + 266, 413, + 267, 414, + 268, 415, + 269, 416, + 270, 417, + 271, 418, + 272, 419, + 273, 420, + 274, 421, + 275, 422, + 276, 423, + 277, 424, + 278, 425, + 279, 426, + 280, 427, + 281, 428, + 282, 429, + 283, 430, + 290, 433, + 293, 436, + 294, 437, + 296, 438, + 298, 439, + 299, 440, 307, 448, - 308, 449, - 309, 450, - 310, 451, - 311, 452, - 312, 453, - 313, 454, - 314, 455, - 315, 456, - 316, 457, - 317, 458, - 318, 459, - 319, 460, - 320, 461, - 321, 462, - 322, 463, - 323, 464, - 324, 465, - 342, 476, - 349, 483, - 350, 484, - 357, 486, - 364, 506, - 378, 517, - 385, 522, - 398, 533, - 404, 537, - 406, 538, - 411, 541, - 433, 566, - 439, 573, - 443, 575, - 447, 577, - 471, 603, - 475, 607, + 308, 450, + 309, 451, + 310, 452, + 311, 453, + 312, 454, + 313, 455, + 314, 456, + 315, 457, + 316, 458, + 317, 459, + 318, 460, + 319, 461, + 320, 462, + 321, 463, + 322, 464, + 323, 465, + 324, 466, + 325, 467, + 343, 478, + 350, 485, + 351, 486, + 358, 488, + 365, 508, + 379, 519, + 386, 524, + 399, 535, + 405, 539, + 407, 540, + 412, 543, + 434, 568, + 441, 575, + 445, 577, + 449, 579, + 473, 605, 477, 609, - 480, 612, - 504, 627, - 508, 635, - 515, 642, - 529, 651, - 534, 655, - 560, 659, - 567, 664, - 570, 699, - 571, 700, + 479, 611, + 482, 614, + 506, 629, + 510, 637, + 517, 644, + 531, 653, + 536, 657, + 562, 661, + 569, 666, 572, 701, - 601, 707, - 604, 710, - 608, 715, - 610, 738, - 615, 741, - 616, 742, - 623, 747, - 624, 748, - 626, 755, - 646, 771, - 652, 651, - 654, 776, - 669, 789, + 573, 702, + 574, 703, + 603, 709, + 606, 712, + 610, 717, + 612, 740, + 617, 743, + 618, 744, + 625, 749, + 626, 750, + 628, 757, + 648, 773, + 654, 653, + 656, 778, 671, 791, - 673, 794, - 702, 820, - 709, 826, - 733, 838, - 739, 843, - 749, 879, - 756, 887, - 757, 892, - 761, 898, - 762, 899, - 779, 931, - 780, 932, - 803, 948, - 817, 962, - 818, 963, - 822, 965, - 823, 966, - 827, 969, - 837, 973, + 673, 793, + 675, 796, + 704, 822, + 711, 828, + 735, 840, + 741, 845, + 751, 881, + 758, 889, + 759, 894, + 763, 900, + 764, 901, + 781, 933, + 782, 934, + 805, 950, + 819, 964, + 820, 965, + 824, 967, + 825, 968, + 829, 971, 839, 975, - 842, 977, + 841, 977, 844, 979, 846, 981, - 847, 982, 848, 983, 849, 984, - 855, 992, - 856, 993, - 865, 1002, - 877, 1028, - 883, 651, - 891, 1045, - 894, 1057, - 895, 1060, - 896, 1062, - 911, 1075, - 929, 1083, - 938, 1089, - 939, 1090, - 941, 1091, - 942, 1092, - 964, 1112, - 989, 1129, - 1003, 1137, - 1004, 1139, - 1005, 1140, + 850, 985, + 851, 986, + 857, 994, + 858, 995, + 867, 1004, + 879, 1030, + 885, 653, + 893, 1047, + 896, 1059, + 897, 1062, + 898, 1064, + 913, 1077, + 931, 1085, + 940, 1091, + 941, 1092, + 943, 1093, + 944, 1094, + 966, 1114, + 991, 1131, + 1005, 1139, 1006, 1141, 1007, 1142, 1008, 1143, @@ -18685,79 +18699,81 @@ static int parser_goto_row103[] = { 1019, 1154, 1020, 1155, 1021, 1156, - 1025, 1160, - 1026, 1161, - 1029, 1163, - 1043, 1175, - 1046, 1178, - 1047, 1180, - 1050, 1181, - 1058, 1191, - 1061, 1193, - 1064, 1197, - 1065, 1199, - 1067, 1200, - 1068, 1201, - 1079, 1210, - 1085, 1214, - 1086, 1215, + 1022, 1157, + 1023, 1158, + 1027, 1162, + 1028, 1163, + 1031, 1165, + 1045, 1177, + 1048, 1180, + 1049, 1182, + 1052, 1183, + 1060, 1193, + 1063, 1195, + 1066, 1199, + 1067, 1201, + 1069, 1202, + 1070, 1203, + 1081, 1212, 1087, 1216, - 1110, 1233, - 1123, 1240, - 1131, 1246, - 1132, 1247, - 1138, 1251, - 1159, 1276, - 1164, 1278, - 1173, 1285, - 1176, 1288, - 1179, 1290, - 1186, 1303, - 1194, 1308, - 1195, 1310, - 1198, 1312, - 1213, 1326, - 1217, 1330, - 1220, 1334, - 1221, 1335, - 1236, 1345, - 1243, 1348, - 1272, 1355, - 1280, 1359, - 1295, 627, - 1299, 627, - 1309, 1377, - 1314, 1380, - 1327, 1387, - 1343, 1398, - 1346, 1400, - 1364, 627, - 1366, 627, - 1370, 627, - 1391, 1435, - 1392, 1436, - 1405, 1440, - 1406, 1441, + 1088, 1217, + 1089, 1218, + 1112, 1235, + 1125, 1242, + 1133, 1248, + 1134, 1249, + 1140, 1253, + 1161, 1278, + 1166, 1280, + 1175, 1287, + 1178, 1290, + 1181, 1292, + 1188, 1305, + 1196, 1310, + 1197, 1312, + 1200, 1314, + 1215, 1328, + 1219, 1332, + 1222, 1336, + 1223, 1337, + 1238, 1347, + 1245, 1350, + 1274, 1357, + 1282, 1361, + 1297, 629, + 1301, 629, + 1311, 1379, + 1316, 1382, + 1329, 1389, + 1345, 1400, + 1348, 1402, + 1366, 629, + 1368, 629, + 1372, 629, + 1393, 1437, + 1394, 1438, 1407, 1442, - 1409, 1443, - 1438, 1479, - 1453, 651, - 1456, 1498, - 1460, 1502, - 1475, 1512, - 1481, 1517, - 1482, 1518, - 1484, 1519, - 1485, 1520, + 1408, 1443, + 1409, 1444, + 1411, 1445, + 1440, 1481, + 1455, 653, + 1458, 1500, + 1462, 1504, + 1477, 1514, + 1483, 1519, + 1484, 1520, 1486, 1521, - 1500, 1529, - 1508, 1534, + 1487, 1522, + 1488, 1523, + 1502, 1531, 1510, 1536, - 1516, 1539, - 1535, 1553, + 1512, 1538, + 1518, 1541, 1537, 1555, - 1540, 1557, - 1542, 1558 + 1539, 1557, + 1542, 1559, + 1544, 1560 }; static int parser_goto_row104[] = { 1, @@ -18773,12 +18789,12 @@ static int parser_goto_row106[] = { }; static int parser_goto_row107[] = { 2, - -1, 754, - 1411, 1448 + -1, 756, + 1413, 1450 }; static int parser_goto_row108[] = { 1, - -1, 1258 + -1, 1260 }; static int parser_goto_row109[] = { 1, @@ -18786,69 +18802,69 @@ static int parser_goto_row109[] = { }; static int parser_goto_row110[] = { 2, - -1, 865, - 1539, 1556 + -1, 867, + 1541, 1558 }; static int parser_goto_row111[] = { 1, - -1, 866 + -1, 868 }; static int parser_goto_row112[] = { 6, - -1, 867, - 982, 1124, - 1137, 1250, + -1, 869, + 984, 1126, 1139, 1252, - 1140, 1253, - 1251, 1351 + 1141, 1254, + 1142, 1255, + 1253, 1353 }; static int parser_goto_row113[] = { 1, - -1, 868 + -1, 870 }; static int parser_goto_row114[] = { 10, - -1, 869, - 1141, 1254, - 1142, 1255, - 1146, 1261, - 1147, 1262, + -1, 871, + 1143, 1256, + 1144, 1257, 1148, 1263, 1149, 1264, 1150, 1265, 1151, 1266, - 1152, 1267 + 1152, 1267, + 1153, 1268, + 1154, 1269 }; static int parser_goto_row115[] = { 3, - -1, 870, - 1144, 1259, - 1145, 1260 + -1, 872, + 1146, 1261, + 1147, 1262 }; static int parser_goto_row116[] = { 6, - -1, 871, - 984, 1128, - 993, 1133, - 1153, 1268, - 1154, 1269, - 1155, 1270 + -1, 873, + 986, 1130, + 995, 1135, + 1155, 1270, + 1156, 1271, + 1157, 1272 }; static int parser_goto_row117[] = { 1, - -1, 872 + -1, 874 }; static int parser_goto_row118[] = { 2, - -1, 873, - 854, 991 + -1, 875, + 856, 993 }; static int parser_goto_row119[] = { 4, - -1, 338, - 246, 400, - 301, 441, - 402, 536 + -1, 339, + 246, 401, + 302, 443, + 403, 538 }; static int parser_goto_row120[] = { 1, @@ -18856,7 +18872,7 @@ static int parser_goto_row120[] = { }; static int parser_goto_row121[] = { 1, - -1, 923 + -1, 925 }; static int parser_goto_row122[] = { 1, @@ -18865,9 +18881,9 @@ static int parser_goto_row122[] = { static int parser_goto_row123[] = { 4, -1, 131, - 774, 924, - 1055, 924, - 1326, 1386 + 776, 926, + 1057, 926, + 1328, 1388 }; static int parser_goto_row124[] = { 1, @@ -18876,11 +18892,11 @@ static int parser_goto_row124[] = { static int parser_goto_row125[] = { 6, -1, 133, - 245, 399, - 410, 540, - 412, 542, - 413, 543, - 541, 657 + 245, 400, + 411, 542, + 413, 544, + 414, 545, + 543, 659 }; static int parser_goto_row126[] = { 1, @@ -18889,30 +18905,30 @@ static int parser_goto_row126[] = { static int parser_goto_row127[] = { 10, -1, 135, - 414, 544, - 415, 545, - 419, 549, - 420, 550, - 421, 551, - 422, 552, - 423, 553, - 424, 554, - 425, 555 + 415, 546, + 416, 547, + 420, 551, + 421, 552, + 422, 553, + 423, 554, + 424, 555, + 425, 556, + 426, 557 }; static int parser_goto_row128[] = { 3, -1, 136, - 417, 547, - 418, 548 + 418, 549, + 419, 550 }; static int parser_goto_row129[] = { 6, -1, 137, - 247, 401, - 256, 408, - 426, 556, - 427, 557, - 428, 558 + 247, 402, + 256, 409, + 427, 558, + 428, 559, + 429, 560 }; static int parser_goto_row130[] = { 1, @@ -18922,40 +18938,40 @@ static int parser_goto_row131[] = { 4, -1, 139, 117, 254, - 774, 925, - 1055, 925 + 776, 927, + 1057, 927 }; static int parser_goto_row132[] = { 1, - -1, 473 + -1, 475 }; static int parser_goto_row133[] = { 7, - -1, 474, - 470, 602, - 605, 711, - 968, 1115, - 1113, 1237, - 1126, 1242, - 1241, 1347 + -1, 476, + 472, 604, + 607, 713, + 970, 1117, + 1115, 1239, + 1128, 1244, + 1243, 1349 }; static int parser_goto_row134[] = { 1, - -1, 606 + -1, 608 }; static int parser_goto_row135[] = { 2, - -1, 926, - 1055, 1189 + -1, 928, + 1057, 1191 }; static int parser_goto_row136[] = { 1, - -1, 927 + -1, 929 }; static int parser_goto_row137[] = { 2, - -1, 1127, - 1129, 1245 + -1, 1129, + 1131, 1247 }; static int parser_goto_row138[] = { 1, @@ -19003,20 +19019,20 @@ static int parser_goto_row148[] = { }; static int parser_goto_row149[] = { 8, - -1, 785, - 672, 792, - 946, 1096, - 1093, 1222, - 1219, 1332, - 1389, 1434, - 1476, 1513, - 1563, 1566 + -1, 787, + 674, 794, + 948, 1098, + 1095, 1224, + 1221, 1334, + 1391, 1436, + 1478, 1515, + 1565, 1568 }; static int parser_goto_row150[] = { 3, - -1, 786, - 568, 687, - 1218, 1331 + -1, 788, + 570, 689, + 1220, 1333 }; static int parser_goto_row151[] = { 1, @@ -19024,60 +19040,60 @@ static int parser_goto_row151[] = { }; static int parser_goto_row152[] = { 1, - -1, 688 + -1, 690 }; static int parser_goto_row153[] = { 1, - -1, 689 + -1, 691 }; static int parser_goto_row154[] = { 1, - -1, 690 + -1, 692 }; static int parser_goto_row155[] = { 1, - -1, 691 + -1, 693 }; static int parser_goto_row156[] = { 1, - -1, 692 + -1, 694 }; static int parser_goto_row157[] = { 1, - -1, 693 + -1, 695 }; static int parser_goto_row158[] = { 1, - -1, 694 + -1, 696 }; static int parser_goto_row159[] = { 1, - -1, 695 + -1, 697 }; static int parser_goto_row160[] = { 22, -1, 181, - 178, 334, - 674, 795, - 675, 797, - 676, 799, + 178, 335, + 676, 797, + 677, 799, 678, 801, - 796, 943, - 798, 944, - 800, 945, - 949, 1103, - 950, 1104, - 952, 1105, - 953, 1106, + 680, 803, + 798, 945, + 800, 946, + 802, 947, + 951, 1105, + 952, 1106, 954, 1107, 955, 1108, - 1097, 1225, - 1216, 1329, - 1330, 1388, - 1336, 1393, - 1337, 1394, + 956, 1109, + 957, 1110, + 1099, 1227, + 1218, 1331, + 1332, 1390, 1338, 1395, - 1339, 1396 + 1339, 1396, + 1340, 1397, + 1341, 1398 }; static int parser_goto_row161[] = { 1, @@ -19103,14 +19119,14 @@ static int parser_goto_row166[] = { 10, -1, 145, 33, 150, - 569, 698, - 667, 787, - 672, 793, - 1111, 1235, - 1219, 1333, - 1437, 1478, - 1476, 1514, - 1563, 1567 + 571, 700, + 669, 789, + 674, 795, + 1113, 1237, + 1221, 1335, + 1439, 1480, + 1478, 1516, + 1565, 1569 }; static int parser_goto_row167[] = { 1, @@ -19118,11 +19134,11 @@ static int parser_goto_row167[] = { }; static int parser_goto_row168[] = { 1, - -1, 737 + -1, 739 }; static int parser_goto_row169[] = { 1, - -1, 928 + -1, 930 }; static int parser_goto_row170[] = { 1, @@ -19134,12 +19150,12 @@ static int parser_goto_row171[] = { }; static int parser_goto_row172[] = { 2, - -1, 893, - 896, 1063 + -1, 895, + 898, 1065 }; static int parser_goto_row173[] = { 1, - -1, 1055 + -1, 1057 }; static int parser_goto_row174[] = { 2, @@ -19166,43 +19182,43 @@ static int parser_goto_row176[] = { }; static int parser_goto_row177[] = { 4, - -1, 894, - 891, 1046, - 896, 1064, - 1061, 1194 + -1, 896, + 893, 1048, + 898, 1066, + 1063, 1196 }; static int parser_goto_row178[] = { 8, - -1, 895, - 891, 1047, - 894, 1058, - 896, 1065, - 1046, 1179, - 1061, 1195, - 1064, 1198, - 1194, 1309 + -1, 897, + 893, 1049, + 896, 1060, + 898, 1067, + 1048, 1181, + 1063, 1197, + 1066, 1200, + 1196, 1311 }; static int parser_goto_row179[] = { 1, - -1, 1176 + -1, 1178 }; static int parser_goto_row180[] = { 1, - -1, 1029 + -1, 1031 }; static int parser_goto_row181[] = { 1, - -1, 1166 + -1, 1168 }; static int parser_goto_row182[] = { 1, - -1, 825 + -1, 827 }; static int parser_goto_row183[] = { 3, -1, 206, - 288, 431, - 811, 958 + 288, 432, + 813, 960 }; static int parser_goto_row184[] = { 1, @@ -19210,20 +19226,20 @@ static int parser_goto_row184[] = { }; static int parser_goto_row185[] = { 1, - -1, 648 + -1, 650 }; static int parser_goto_row186[] = { 1, - -1, 652 + -1, 654 }; static int parser_goto_row187[] = { 2, - -1, 841, - 927, 1082 + -1, 843, + 929, 1084 }; static int parser_goto_row188[] = { 1, - -1, 618 + -1, 620 }; static int parser_goto_row189[] = { 50, @@ -19237,46 +19253,46 @@ static int parser_goto_row189[] = { 107, 241, 144, 81, 205, 81, - 335, 81, - 367, 81, - 369, 512, - 393, 525, - 430, 81, - 466, 81, - 469, 81, - 486, 241, - 506, 632, - 564, 81, - 568, 696, - 569, 81, - 607, 714, - 655, 714, - 667, 696, - 670, 81, - 672, 696, - 686, 81, - 751, 81, - 784, 81, - 813, 81, - 885, 81, - 946, 696, - 948, 1102, - 1093, 696, - 1095, 81, - 1111, 81, - 1218, 696, - 1219, 696, - 1348, 714, - 1389, 696, - 1415, 81, - 1437, 81, - 1445, 81, - 1450, 81, - 1455, 81, - 1476, 696, - 1491, 81, - 1494, 81, - 1563, 696 + 336, 81, + 368, 81, + 370, 514, + 394, 527, + 431, 81, + 468, 81, + 471, 81, + 488, 241, + 508, 634, + 566, 81, + 570, 698, + 571, 81, + 609, 716, + 657, 716, + 669, 698, + 672, 81, + 674, 698, + 688, 81, + 753, 81, + 786, 81, + 815, 81, + 887, 81, + 948, 698, + 950, 1104, + 1095, 698, + 1097, 81, + 1113, 81, + 1220, 698, + 1221, 698, + 1350, 716, + 1391, 698, + 1417, 81, + 1439, 81, + 1447, 81, + 1452, 81, + 1457, 81, + 1478, 698, + 1493, 81, + 1496, 81, + 1565, 698 }; static int parser_goto_row190[] = { 2, @@ -19291,7 +19307,7 @@ static int parser_goto_row191[] = { }; static int parser_goto_row192[] = { 1, - -1, 896 + -1, 898 }; const int* const parser_goto_table[] = { diff --git a/src/platform.nit b/src/platform.nit index 17257f5..3c5367f 100644 --- a/src/platform.nit +++ b/src/platform.nit @@ -113,6 +113,8 @@ end abstract class Platform fun supports_libunwind: Bool do return true + fun supports_libgc: Bool do return true + # Does this platform declare its own main function? If so, we won't generate one in Nit. fun no_main: Bool do return false end diff --git a/src/pnacl_platform.nit b/src/pnacl_platform.nit index 6dfdc3a..62c2f60 100644 --- a/src/pnacl_platform.nit +++ b/src/pnacl_platform.nit @@ -77,7 +77,7 @@ THIS_MAKEFILE := $(abspath $(lastword $(MAKEFILE_LIST))) NACL_SDK_ROOT ?= $(abspath $(dir $(THIS_MAKEFILE))../../../..) # Project Build flags -WARNINGS := -Wall -pedantic -Werror -Wno-long-long -Wno-unused-value -Wno-unused-label -Wno-duplicate-decl-specifier -Wno-switch -Wno-embedded-directive +WARNINGS := -Wall -pedantic -Wno-long-long -Wno-unused-value -Wno-unused-label -Wno-duplicate-decl-specifier -Wno-switch -Wno-embedded-directive CXXFLAGS := -pthread $(WARNINGS) CXXFLAGS += -g -O0 # Debug @@ -244,6 +244,6 @@ function updateStatus(opt_message) { redef fun compile_c_code(compiler, compile_dir) do # Generate the pexe - toolcontext.exec_and_check(["make", "-C", compile_dir], "PNaCl project error") + toolcontext.exec_and_check(["make", "-C", compile_dir, "-j", "4"], "PNaCl project error") end end diff --git a/src/typing.nit b/src/typing.nit index edb1c89..5db0ada 100644 --- a/src/typing.nit +++ b/src/typing.nit @@ -51,6 +51,11 @@ private class TypeVisitor var selfvariable: Variable = new Variable("self") + # Is `self` use restricted? + # * no explicit `self` + # * method called on the implicit self must be top-level + var is_toplevel_context = false + init(modelbuilder: ModelBuilder, mmodule: MModule, mpropdef: nullable MPropDef) do self.modelbuilder = modelbuilder @@ -67,6 +72,11 @@ private class TypeVisitor var selfvariable = new Variable("self") self.selfvariable = selfvariable selfvariable.declared_type = mclass.mclass_type + + var mprop = mpropdef.mproperty + if mprop isa MMethod and mprop.is_toplevel then + is_toplevel_context = true + end end end @@ -241,6 +251,15 @@ private class TypeVisitor end assert mproperty isa MMethod + + if is_toplevel_context and recv_is_self and not mproperty.is_toplevel and name != "sys" and name != "exit" and name != "args" then + # FIXME named methods are here as a workaround + error(node, "Error: '{name}' is not a top-level method, thus need a receiver.") + end + if not recv_is_self and mproperty.is_toplevel then + error(node, "Error: cannot call '{name}', a top-level method, with a receiver.") + end + if mproperty.visibility == protected_visibility and not recv_is_self and self.mmodule.visibility_for(mproperty.intro_mclassdef.mmodule) < intrude_visibility and not modelbuilder.toolcontext.opt_ignore_visibility.value then self.modelbuilder.error(node, "Error: Method '{name}' is protected and can only acceded by self.") return null @@ -833,7 +852,7 @@ redef class AForExpr if objcla == null then return # check iterator method - var itdef = v.get_method(self, mtype, "iterator", true) + var itdef = v.get_method(self, mtype, "iterator", n_expr isa ASelfExpr) if itdef == null then v.error(self, "Type Error: 'for' expects a type providing 'iterator' method, got '{mtype}'.") return @@ -1199,6 +1218,9 @@ redef class ASelfExpr redef var its_variable: nullable Variable redef fun accept_typing(v) do + if v.is_toplevel_context and not self isa AImplicitSelfExpr then + v.error(self, "Error: self cannot be used in top-level method.") + end var variable = v.selfvariable self.its_variable = variable self.mtype = v.get_variable(self, variable) diff --git a/src/vm.nit b/src/vm.nit new file mode 100644 index 0000000..3c8f048 --- /dev/null +++ b/src/vm.nit @@ -0,0 +1,314 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2014 Julien Pagès +# +# 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. + +# Implementation of the Nit virtual machine +module vm + +intrude import naive_interpreter +import model_utils +import perfect_hashing + +redef class ModelBuilder + redef fun run_naive_interpreter(mainmodule: MModule, arguments: Array[String]) + do + var time0 = get_time + self.toolcontext.info("*** NITVM STARTING ***", 1) + + var interpreter = new VirtualMachine(self, mainmodule, arguments) + init_naive_interpreter(interpreter, mainmodule) + + var time1 = get_time + self.toolcontext.info("*** NITVM STOPPING : {time1-time0} ***", 2) + end +end + +# A virtual machine based on the naive_interpreter +class VirtualMachine super NaiveInterpreter + + # Perfect hashing and perfect numbering + var ph: Perfecthashing = new Perfecthashing + + # Handles memory and garbage collection + var memory_manager: MemoryManager = new MemoryManager + + # Subtyping test for the virtual machine + redef fun is_subtype(sub, sup: MType): Bool + do + var anchor = self.frame.arguments.first.mtype.as(MClassType) + var sup_accept_null = false + if sup isa MNullableType then + sup_accept_null = true + sup = sup.mtype + else if sup isa MNullType then + sup_accept_null = true + end + + # Can `sub` provides null or not? + # Thus we can match with `sup_accept_null` + # Also discard the nullable marker if it exists + if sub isa MNullableType then + if not sup_accept_null then return false + sub = sub.mtype + else if sub isa MNullType then + return sup_accept_null + end + # Now the case of direct null and nullable is over + + # An unfixed formal type can only accept itself + 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 + if sub isa MNullableType then + if not sup_accept_null then return false + sub = sub.mtype + else if sub isa MNullType then + return sup_accept_null + end + end + + assert sub isa MClassType + + # `sup` accepts only null + if sup isa MNullType then return false + + assert sup isa MClassType + + # Create the sup vtable if not create + if not sup.mclass.loaded then create_class(sup.mclass) + + # Sub can be discovered inside a Generic type during the subtyping test + if not sub.mclass.loaded then create_class(sub.mclass) + + if anchor == null then anchor = sub + if sup isa MGenericType then + var sub2 = sub.supertype_to(mainmodule, anchor, sup.mclass) + assert sub2.mclass == sup.mclass + + for i in [0..sup.mclass.arity[ do + var sub_arg = sub2.arguments[i] + var sup_arg = sup.arguments[i] + var res = is_subtype(sub_arg, sup_arg) + + if res == false then return false + end + return true + end + + var super_id = sup.mclass.vtable.id + var mask = sub.mclass.vtable.mask + + return inter_is_subtype(super_id, mask, sub.mclass.vtable.internal_vtable) + end + + # Subtyping test with perfect hashing + private fun inter_is_subtype(id: Int, mask:Int, vtable: Pointer): Bool `{ + // hv is the position in hashtable + int hv = id & mask; + + // 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 + if not recv.mtype.as(MClassType).mclass.loaded then create_class(recv.mtype.as(MClassType).mclass) + super + + recv.vtable = recv.mtype.as(MClassType).mclass.vtable + end + + # Creates the runtime structures for this class + fun create_class(mclass: MClass) do mclass.make_vt(self) +end + +redef class MClass + # A reference to the virtual table of this class + var vtable: nullable VTable + + # True when the class is effectively loaded by the vm, false otherwise + var loaded: Bool = false + + # Allocates a VTable for this class and gives it an id + private fun make_vt(v: VirtualMachine) + do + if loaded then return + + # Superclasses contains all superclasses except self + var superclasses = new Array[MClass] + superclasses.add_all(ancestors) + superclasses.remove(self) + v.mainmodule.linearize_mclasses(superclasses) + + # Make_vt for super-classes + var ids = new Array[Int] + var nb_methods = new Array[Int] + + for parent in superclasses do + if parent.vtable == null then parent.make_vt(v) + + # Get the number of introduced methods for this class + var count = 0 + var min_visibility = public_visibility + for p in parent.intro_mproperties(min_visibility) do + if p isa MMethod then + count += 1 + end + end + + ids.push(parent.vtable.id) + nb_methods.push(count) + end + + # When all super-classes have their identifiers and vtables, allocate current one + allocate_vtable(v, ids, nb_methods) + loaded = true + # The virtual table now needs to be filled with pointer to methods + end + + # Allocate a single vtable + # ids : Array of superclasses identifiers + # nb_methods : Array which contain the number of methods for each class in ids + private fun allocate_vtable(v: VirtualMachine, ids: Array[Int], nb_methods: Array[Int]) + do + vtable = new VTable + var idc = new Array[Int] + + vtable.mask = v.ph.pnand(ids, 1, idc) - 1 + vtable.id = idc[0] + vtable.classname = name + + # Add current id to Array of super-ids + var ids_total = new Array[Int] + ids_total.add_all(ids) + ids_total.push(vtable.id) + + var nb_methods_total = new Array[Int] + var count = 0 + var min_visibility = public_visibility + for p in intro_mproperties(min_visibility) do + if p isa MMethod then + count += 1 + end + end + nb_methods_total.add_all(nb_methods) + nb_methods_total.push(count) + + vtable.internal_vtable = v.memory_manager.init_vtable(ids_total, nb_methods_total, vtable.mask) + end +end + +# A VTable contains the virtual method table for the dispatch +# and informations to perform subtyping tests +class VTable + # The mask to perform perfect hashing + var mask: Int + + # Unique identifier given by perfect hashing + var id: Int + + # Pointer to the c-allocated area, represents the virtual table + var internal_vtable: Pointer + + # The short classname of this class + var classname: String + + init do end +end + +redef class Instance + + var vtable: nullable VTable + + init(mt: MType) + do + mtype = mt + + # An instance is associated to its class virtual table + if mt isa MClassType then + vtable = mt.mclass.vtable + end + end +end + +# Handle memory, used for allocate virtual table and associated structures +class MemoryManager + + # Allocate and fill a virtual table + fun init_vtable(ids: Array[Int], nb_methods: Array[Int], mask: Int): Pointer + do + # Allocate in C current virtual table + var res = intern_init_vtable(ids, nb_methods, mask) + + return res + end + + # Construct virtual tables with a bi-dimensional layout + private fun intern_init_vtable(ids: Array[Int], nb_methods: Array[Int], mask: Int): Pointer + import Array[Int].length, Array[Int].[] `{ + + // Allocate and fill current virtual table + int i; + int total_size = 0; // total size of this virtual table + int nb_classes = Array_of_Int_length(nb_methods); + for(i = 0; i import end -interface Object +interface Object end enum Bool diff --git a/tests/sav/nitmetrics_args1.res b/tests/sav/nitmetrics_args1.res index 0c177f8..4540753 100644 --- a/tests/sav/nitmetrics_args1.res +++ b/tests/sav/nitmetrics_args1.res @@ -41,11 +41,11 @@ std: 0.0 sum: 7 mnbr: number of refinement in module - avg: 3.0 - max: base_simple3 (3) - min: base_simple3 (3) + avg: 0.0 + max: base_simple3 (0) + min: base_simple3 (0) std: 0.0 - sum: 3 + sum: 0 mnbcc: number of concrete class in module (intro + redef) avg: 4.0 max: base_simple3 (4) @@ -59,11 +59,11 @@ std: 0.0 sum: 0 mnbic: number of interface in module (intro + redef) - avg: 4.0 - max: base_simple3 (4) - min: base_simple3 (4) + avg: 1.0 + max: base_simple3 (1) + min: base_simple3 (1) std: 0.0 - sum: 4 + sum: 1 ## project base_empty_module `- group base_empty_module @@ -166,11 +166,11 @@ std: 3.0 sum: 8 mnbr: number of refinement in module - avg: 1.0 - max: base_simple3 (3) - min: base_empty_module (0) - std: 1.581 - sum: 3 + avg: 0.0 + max: base_simple3 (0) + min: base_simple3 (0) + std: 0.0 + sum: 0 mnbcc: number of concrete class in module (intro + redef) avg: 2.0 max: base_simple3 (4) @@ -184,11 +184,11 @@ std: 0.0 sum: 0 mnbic: number of interface in module (intro + redef) - avg: 2.0 - max: base_simple3 (4) + avg: 0.0 + max: base_simple3 (1) min: base_empty_module (0) - std: 2.0 - sum: 4 + std: 0.707 + sum: 1 # MClasses metrics @@ -421,48 +421,45 @@ Distribution of direct smallers <=0: sub-population=1 (33.33%); cumulated value=0 (0.0%) <=1: sub-population=2 (66.66%); cumulated value=2 (100.00%) ## Classdef hierarchy -Number of nodes: 11 -Number of edges: 47 (4.27 per node) -Number of direct edges: 9 (0.81 per node) +Number of nodes: 8 +Number of edges: 14 (1.75 per node) +Number of direct edges: 6 (0.75 per node) Distribution of greaters - population: 11 + population: 8 minimum value: 1 - maximum value: 5 - total value: 47 - average value: 4.27 + maximum value: 2 + total value: 14 + average value: 1.75 distribution: - <=1: sub-population=1 (9.09%); cumulated value=1 (2.12%) - <=4: sub-population=4 (36.36%); cumulated value=16 (34.04%) - <=8: sub-population=6 (54.54%); cumulated value=30 (63.82%) + <=1: sub-population=2 (25.00%); cumulated value=2 (14.28%) + <=2: sub-population=6 (75.00%); cumulated value=12 (85.71%) Distribution of direct greaters - population: 11 + population: 8 minimum value: 0 - maximum value: 3 - total value: 9 - average value: 0.81 + maximum value: 1 + total value: 6 + average value: 0.75 distribution: - <=0: sub-population=4 (36.36%); cumulated value=0 (0.0%) - <=1: sub-population=6 (54.54%); cumulated value=6 (66.66%) - <=4: sub-population=1 (9.09%); cumulated value=3 (33.33%) + <=0: sub-population=2 (25.00%); cumulated value=0 (0.0%) + <=1: sub-population=6 (75.00%); cumulated value=6 (100.00%) Distribution of smallers - population: 11 + population: 8 minimum value: 1 - maximum value: 10 - total value: 47 - average value: 4.27 + maximum value: 7 + total value: 14 + average value: 1.75 distribution: - <=1: sub-population=7 (63.63%); cumulated value=7 (14.89%) - <=16: sub-population=4 (36.36%); cumulated value=40 (85.10%) + <=1: sub-population=7 (87.50%); cumulated value=7 (50.00%) + <=8: sub-population=1 (12.50%); cumulated value=7 (50.00%) Distribution of direct smallers - population: 11 + population: 8 minimum value: 0 maximum value: 6 - total value: 9 - average value: 0.81 + total value: 6 + average value: 0.75 distribution: - <=0: sub-population=7 (63.63%); cumulated value=0 (0.0%) - <=1: sub-population=3 (27.27%); cumulated value=3 (33.33%) - <=8: sub-population=1 (9.09%); cumulated value=6 (66.66%) + <=0: sub-population=7 (87.50%); cumulated value=0 (0.0%) + <=8: sub-population=1 (12.50%); cumulated value=6 (100.00%) ## Class hierarchy Number of nodes: 8 Number of edges: 14 (1.75 per node) @@ -580,10 +577,10 @@ Number of classes: 8 Number of enum kind: 2 (25.00%) Number of class kind: 5 (62.50%) -Number of class definitions: 11 -Number of refined classes: 1 (12.50%) -Average number of class refinments by classes: 0.37 -Average number of class refinments by refined classes: 3.00 +Number of class definitions: 8 +Number of refined classes: 0 (0.0%) +Average number of class refinments by classes: 0.0 +Average number of class refinments by refined classes: na Number of properties: 20 Number of MAttribute: 3 (15.00%) @@ -614,7 +611,7 @@ Total number of self: 5 Total number of implicit self: 4 (80.00%) --- Construction of tables --- Number of runtime classes: 7 (excluding interfaces and abstract classes) -Average number of composing class definition by runtime class: 4.42 +Average number of composing class definition by runtime class: 1.85 Total size of tables (classes and instances): 35 (not including stuff like info for subtyping or call-next-method) Average size of table by runtime class: 5.00 Values never redefined: 35 (100.00%) @@ -632,6 +629,8 @@ Values never redefined: 35 (100.00%) blooming mclasses (threshold: 2.388) B: 3.0 C: 3.0 +generating out/nitmetrics_args1.write/project_hierarchy.dot +generating out/nitmetrics_args1.write/module_hierarchy.dot # Nullable metrics @@ -1075,8 +1074,6 @@ MMethodDef possibly invoked at runtime (by number of CallSites) base_simple3#Object#bar: 1 (4.54%) base_simple3#Object#foo: 1 (4.54%) base_simple3#C#init: 1 (4.54%) -generating out/nitmetrics_args1.write/project_hierarchy.dot -generating out/nitmetrics_args1.write/module_hierarchy.dot class_hierarchy.dot classdef_hierarchy.dot inheritance/ diff --git a/tests/sav/nitvm.res b/tests/sav/nitvm.res new file mode 100644 index 0000000..742b9e8 --- /dev/null +++ b/tests/sav/nitvm.res @@ -0,0 +1,3 @@ +Usage: nitvm [OPTION]... ... +Executes Nit programs with a virtual machine. +Use --help for help diff --git a/tests/sav/nitvm_args1.res b/tests/sav/nitvm_args1.res new file mode 100644 index 0000000..3b18e51 --- /dev/null +++ b/tests/sav/nitvm_args1.res @@ -0,0 +1 @@ +hello world diff --git a/tests/sav/nitvm_args2.res b/tests/sav/nitvm_args2.res new file mode 100644 index 0000000..f00c965 --- /dev/null +++ b/tests/sav/nitvm_args2.res @@ -0,0 +1,10 @@ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 diff --git a/tests/sav/nitvm_args3.res b/tests/sav/nitvm_args3.res new file mode 100644 index 0000000..c76ebf3 --- /dev/null +++ b/tests/sav/nitvm_args3.res @@ -0,0 +1,3 @@ +MIX: Before +MIX: hello world +MIX: After diff --git a/tests/sav/nitx_args3.res b/tests/sav/nitx_args3.res index 264e277..e3174b3 100644 --- a/tests/sav/nitx_args3.res +++ b/tests/sav/nitx_args3.res @@ -25,15 +25,4 @@ class Sys base_simple3::Sys (lines 53-66) - - == refined classes - - redef interface Object - base_simple3::Object (lines 49-49) - - redef interface Object - base_simple3::Object (lines 50-50) - - redef interface Object - base_simple3::Object (lines 51-51) diff --git a/tests/sav/test_ffi_java_annot_files.res b/tests/sav/test_ffi_java_annot_files.res new file mode 100644 index 0000000..cbbeae1 --- /dev/null +++ b/tests/sav/test_ffi_java_annot_files.res @@ -0,0 +1,4 @@ +-1 +1 +-1 +1 diff --git a/tests/test_ffi_java_annot_files.nit b/tests/test_ffi_java_annot_files.nit new file mode 100644 index 0000000..c57135a --- /dev/null +++ b/tests/test_ffi_java_annot_files.nit @@ -0,0 +1,35 @@ +# 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. + +module test_ffi_java_annot_files is + extra_java_files("test_ffi_java_annot_files_a.java") +end + +import java + +fun foo in "Java" `{ + test_ffi_java_annot_files_a zero = new test_ffi_java_annot_files_a(0); + test_ffi_java_annot_files_a one = new test_ffi_java_annot_files_a(1); + test_ffi_java_annot_files_a ten = new test_ffi_java_annot_files_a(10); + test_ffi_java_annot_files_a neg = new test_ffi_java_annot_files_a(-1); + + System.out.println(zero.compareTo(one)); + System.out.println(one.compareTo(zero)); + System.out.println(zero.compareTo(ten)); + System.out.println(zero.compareTo(neg)); +`} + +foo diff --git a/tests/test_ffi_java_annot_files_a.java b/tests/test_ffi_java_annot_files_a.java new file mode 100644 index 0000000..2a7fdf5 --- /dev/null +++ b/tests/test_ffi_java_annot_files_a.java @@ -0,0 +1,30 @@ +// This file is part of NIT ( http://www.nitlanguage.org ). +// +// Copyright 2014 Alexis Laferriere +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import java.lang.Comparable; + +public class test_ffi_java_annot_files_a implements Comparable { + Integer val; + + test_ffi_java_annot_files_a(int val) { + this.val = new Integer(val); + } + + @Override + public int compareTo(test_ffi_java_annot_files_a other) { + return val.compareTo(other.val); + } +}