diff --git a/documentation/coffee/arguments.coffee b/documentation/coffee/arguments.coffee index afee3741..55c83348 100644 --- a/documentation/coffee/arguments.coffee +++ b/documentation/coffee/arguments.coffee @@ -1,4 +1,4 @@ -backwards: => +backwards: () => alert arguments.reverse() backwards "stairway", "to", "heaven" \ No newline at end of file diff --git a/documentation/coffee/blocks.coffee b/documentation/coffee/blocks.coffee index 6f31ee16..a80196b3 100644 --- a/documentation/coffee/blocks.coffee +++ b/documentation/coffee/blocks.coffee @@ -1,4 +1,4 @@ -$('table.list').each() table => - $('tr.account', table).each() row => +$('table.list').each (table) => + $('tr.account', table).each (row) => row.show() row.highlight() diff --git a/documentation/coffee/expressions.coffee b/documentation/coffee/expressions.coffee index fa0c1e3a..f74f8442 100644 --- a/documentation/coffee/expressions.coffee +++ b/documentation/coffee/expressions.coffee @@ -1,4 +1,4 @@ -grade: student => +grade: (student) => if student.excellent_work "A+" else if student.okay_stuff diff --git a/documentation/coffee/functions.coffee b/documentation/coffee/functions.coffee index ccc9401d..3d00c8f1 100644 --- a/documentation/coffee/functions.coffee +++ b/documentation/coffee/functions.coffee @@ -1,2 +1,2 @@ -square: x => x * x -cube: x => square(x) * x +square: (x) => x * x +cube: (x) => square(x) * x diff --git a/documentation/coffee/long_arrow.coffee b/documentation/coffee/long_arrow.coffee index 3b6e6504..90c33731 100644 --- a/documentation/coffee/long_arrow.coffee +++ b/documentation/coffee/long_arrow.coffee @@ -1,6 +1,6 @@ -Account: customer, cart => +Account: (customer, cart) => this.customer: customer this.cart: cart - $('.shopping_cart').bind('click') event ==> + $('.shopping_cart').bind('click') (event) ==> this.customer.purchase this.cart \ No newline at end of file diff --git a/documentation/coffee/multiple_return_values.coffee b/documentation/coffee/multiple_return_values.coffee index ef83ee0f..116f8b53 100644 --- a/documentation/coffee/multiple_return_values.coffee +++ b/documentation/coffee/multiple_return_values.coffee @@ -1,4 +1,4 @@ -weather_report: location => +weather_report: (location) => # Make an Ajax request to fetch the weather... [location, 72, "Mostly Sunny"] diff --git a/documentation/coffee/overview.coffee b/documentation/coffee/overview.coffee index 1b45bb69..0d8cd4d5 100644 --- a/documentation/coffee/overview.coffee +++ b/documentation/coffee/overview.coffee @@ -6,7 +6,7 @@ opposite_day: true number: -42 if opposite_day # Functions: -square: x => x * x +square: (x) => x * x # Arrays: list: [1, 2, 3, 4, 5] @@ -15,11 +15,11 @@ list: [1, 2, 3, 4, 5] math: { root: Math.sqrt square: square - cube: x => x * square(x) + cube: (x) => x * square x } # Splats: -race: winner, runners... => +race: (winner, runners...) => print winner, runners # Existence: diff --git a/documentation/coffee/range_comprehensions.coffee b/documentation/coffee/range_comprehensions.coffee index 8baa2e87..9b10f155 100644 --- a/documentation/coffee/range_comprehensions.coffee +++ b/documentation/coffee/range_comprehensions.coffee @@ -1,6 +1,6 @@ countdown: num for num in [10..1] -egg_delivery: => +egg_delivery: () => for i in [0...eggs.length] by 12 dozen_eggs: eggs[i...i+12] deliver new egg_carton(dozen) diff --git a/documentation/coffee/scope.coffee b/documentation/coffee/scope.coffee index b074dad2..4ae8401d 100644 --- a/documentation/coffee/scope.coffee +++ b/documentation/coffee/scope.coffee @@ -1,5 +1,5 @@ num: 1 -change_numbers: => +change_numbers: () => new_num: -1 num: 10 new_num: change_numbers() \ No newline at end of file diff --git a/documentation/coffee/splats.coffee b/documentation/coffee/splats.coffee index 93ca192d..ad919a5c 100644 --- a/documentation/coffee/splats.coffee +++ b/documentation/coffee/splats.coffee @@ -1,6 +1,6 @@ gold: silver: the_field: "unknown" -medalists: first, second, rest... => +medalists: (first, second, rest...) => gold: first silver: second the_field: rest diff --git a/documentation/coffee/super.coffee b/documentation/coffee/super.coffee index fa58a032..7cedbf44 100644 --- a/documentation/coffee/super.coffee +++ b/documentation/coffee/super.coffee @@ -1,16 +1,16 @@ -Animal: => -Animal::move: meters => +Animal: () => +Animal::move: (meters) => alert this.name + " moved " + meters + "m." -Snake: name => this.name: name +Snake: (name) => this.name: name Snake extends Animal -Snake::move: => +Snake::move: () => alert "Slithering..." super 5 -Horse: name => this.name: name +Horse: (name) => this.name: name Horse extends Animal -Horse::move: => +Horse::move: () => alert "Galloping..." super 45 diff --git a/documentation/index.html.erb b/documentation/index.html.erb index fa561d35..34f23c02 100644 --- a/documentation/index.html.erb +++ b/documentation/index.html.erb @@ -174,7 +174,7 @@ gem install coffee-script
-e, --evalIf you'd like to create an anonymous function, just wrap it in parentheses: - (x => x * x) + ((x) => x * x)
@@ -522,11 +522,6 @@ coffee --print app/scripts/*.coffee > concatenation.js so you don't have to close the parentheses on the other side.
<%= code_for('blocks') %> -- If you prefer not to use blocks, you'll need to add a pair of parentheses - to help distinguish the arguments from the definition of the function: - _.map(array, (num => num * 2)) -
Pattern Matching (Destructuring Assignment)
diff --git a/examples/beautiful_code/binary_search.coffee b/examples/beautiful_code/binary_search.coffee
index 92e67409..2c659825 100644
--- a/examples/beautiful_code/binary_search.coffee
+++ b/examples/beautiful_code/binary_search.coffee
@@ -2,7 +2,7 @@
# The implementation of binary search that is tested.
# Return the index of an element in a sorted list. (or -1, if not present)
-index: list, target =>
+index: (list, target) =>
[low, high]: [0, list.length]
while low < high
mid: (low + high) >> 1
diff --git a/examples/beautiful_code/quicksort_runtime.coffee b/examples/beautiful_code/quicksort_runtime.coffee
index bbba0504..2d1dc0b6 100644
--- a/examples/beautiful_code/quicksort_runtime.coffee
+++ b/examples/beautiful_code/quicksort_runtime.coffee
@@ -1,7 +1,7 @@
# Beautiful Code, Chapter 3.
# Produces the expected runtime of Quicksort, for every integer from 1 to N.
-runtime: N =>
+runtime: (N) =>
[sum, t]: [0, 0]
for n in [1..N]
sum += 2 * t
diff --git a/examples/beautiful_code/regular_expression_matcher.coffee b/examples/beautiful_code/regular_expression_matcher.coffee
index da6bd696..7f678402 100644
--- a/examples/beautiful_code/regular_expression_matcher.coffee
+++ b/examples/beautiful_code/regular_expression_matcher.coffee
@@ -3,7 +3,7 @@
# '.', '^', '$', and '*'.
# Search for the regexp anywhere in the text.
-match: regexp, text =>
+match: (regexp, text) =>
return match_here(regexp.slice(1), text) if regexp[0] is '^'
while text
return true if match_here(regexp, text)
@@ -11,7 +11,7 @@ match: regexp, text =>
false
# Search for the regexp at the beginning of the text.
-match_here: regexp, text =>
+match_here: (regexp, text) =>
[cur, next]: [regexp[0], regexp[1]]
if regexp.length is 0 then return true
if next is '*' then return match_star(cur, regexp.slice(2), text)
@@ -20,7 +20,7 @@ match_here: regexp, text =>
false
# Search for a kleene star match at the beginning of the text.
-match_star: c, regexp, text =>
+match_star: (c, regexp, text) =>
while true
return true if match_here(regexp, text)
return false unless text and (text[0] is c or c is '.')
diff --git a/examples/code.coffee b/examples/code.coffee
index 4cc02b72..df8d54bd 100644
--- a/examples/code.coffee
+++ b/examples/code.coffee
@@ -1,14 +1,14 @@
# Functions:
-square: x => x * x
+square: (x) => x * x
-sum: x, y => x + y
+sum: (x, y) => x + y
-odd: x => x % 2 isnt 0
+odd: (x) => x % 2 isnt 0
-even: x => x % 2 is 0
+even: (x) => x % 2 is 0
-run_loop: =>
- fire_events(e => e.stopPropagation())
+run_loop: () =>
+ fire_events((e) => e.stopPropagation())
listen()
wait()
@@ -22,14 +22,14 @@ spaced_out_multiline_object: {
three: new Idea()
inner_obj: {
- freedom: => _.freedom()
+ freedom: () => _.freedom()
}
}
# Arrays:
stooges: [{moe: 45}, {curly: 43}, {larry: 46}]
-exponents: [(x => x), (x => x * x), (x => x * x * x)]
+exponents: [(x) => x, (x) => x * x, (x) => x * x * x]
empty: []
@@ -54,7 +54,7 @@ decoration: medal_of_honor if war_hero
go_to_sleep() unless coffee
# Returning early:
-race: =>
+race: () =>
run()
walk()
crawl()
@@ -103,7 +103,7 @@ while true
# Lexical scoping.
v_1: 5
-change_a_and_set_b: =>
+change_a_and_set_b: () =>
v_1: 10
v_2: 15
v_2: 20
@@ -128,7 +128,7 @@ activity: switch day
else go_to_work()
# Semicolons can optionally be used instead of newlines.
-wednesday: => eat_breakfast(); go_to_work(); eat_dinner()
+wednesday: () => eat_breakfast(); go_to_work(); eat_dinner()
# Array slice literals.
zero_to_nine: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
@@ -140,19 +140,19 @@ sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna
aliquam erat volutpat. Ut wisi enim ad."
# Inheritance and calling super.
-Animal: =>
-Animal::move: meters =>
+Animal: () =>
+Animal::move: (meters) =>
alert(this.name + " moved " + meters + "m.")
-Snake: name => this.name: name
+Snake: (name) => this.name: name
Snake extends Animal
-Snake::move: =>
+Snake::move: () =>
alert('Slithering...')
super(5)
-Horse: name => this.name: name
+Horse: (name) => this.name: name
Horse extends Animal
-Horse::move: =>
+Horse::move: () =>
alert('Galloping...')
super(45)
diff --git a/examples/computer_science/binary_search.coffee b/examples/computer_science/binary_search.coffee
index e5447fa4..8b07f7a5 100644
--- a/examples/computer_science/binary_search.coffee
+++ b/examples/computer_science/binary_search.coffee
@@ -1,5 +1,5 @@
# Uses a binary search algorithm to locate a value in the specified array.
-binary_search: items, value =>
+binary_search: (items, value) =>
start: 0
stop: items.length - 1
diff --git a/examples/computer_science/bubble_sort.coffee b/examples/computer_science/bubble_sort.coffee
index f5578780..0d9a3aca 100644
--- a/examples/computer_science/bubble_sort.coffee
+++ b/examples/computer_science/bubble_sort.coffee
@@ -1,5 +1,5 @@
# A bubble sort implementation, sorting the given array in-place.
-bubble_sort: list =>
+bubble_sort: (list) =>
for i in [0...list.length]
for j in [0...list.length - i]
[list[j], list[j+1]]: [list[j+1], list[j]] if list[j] > list[j+1]
diff --git a/examples/computer_science/linked_list.coffee b/examples/computer_science/linked_list.coffee
index f63da641..7154f71d 100644
--- a/examples/computer_science/linked_list.coffee
+++ b/examples/computer_science/linked_list.coffee
@@ -1,11 +1,11 @@
# "Classic" linked list implementation that doesn't keep track of its size.
-LinkedList: =>
+LinkedList: () =>
this._head: null # Pointer to the first item in the list.
# Appends some data to the end of the list. This method traverses the existing
# list and places the value at the end in a new node.
-LinkedList::add: data =>
+LinkedList::add: (data) =>
# Create a new node object to wrap the data.
node: {data: data, next: null}
@@ -20,7 +20,7 @@ LinkedList::add: data =>
# Retrieves the data at the given position in the list.
-LinkedList::item: index =>
+LinkedList::item: (index) =>
# Check for out-of-bounds values.
return null if index < 0
@@ -36,7 +36,7 @@ LinkedList::item: index =>
# Remove the item from the given location in the list.
-LinkedList::remove: index =>
+LinkedList::remove: (index) =>
# Check for out-of-bounds values.
return null if index < 0
@@ -60,7 +60,7 @@ LinkedList::remove: index =>
# Calculate the number of items in the list.
-LinkedList::size: =>
+LinkedList::size: () =>
current: this._head
count: 0
@@ -72,7 +72,7 @@ LinkedList::size: =>
# Convert the list into an array.
-LinkedList::toArray: =>
+LinkedList::toArray: () =>
result: []
current: this._head
@@ -84,7 +84,7 @@ LinkedList::toArray: =>
# The string representation of the linked list.
-LinkedList::toString: => this.toArray().toString()
+LinkedList::toString: () => this.toArray().toString()
# Tests.
diff --git a/examples/computer_science/luhn_algorithm.coffee b/examples/computer_science/luhn_algorithm.coffee
index 2398fb26..ce3a78da 100644
--- a/examples/computer_science/luhn_algorithm.coffee
+++ b/examples/computer_science/luhn_algorithm.coffee
@@ -2,7 +2,7 @@
# numbers, national insurance numbers, etc.
# See: http://en.wikipedia.org/wiki/Luhn_algorithm
-is_valid_identifier: identifier =>
+is_valid_identifier: (identifier) =>
sum: 0
alt: false
diff --git a/examples/computer_science/merge_sort.coffee b/examples/computer_science/merge_sort.coffee
index ac8d0fe2..4df0a59d 100644
--- a/examples/computer_science/merge_sort.coffee
+++ b/examples/computer_science/merge_sort.coffee
@@ -1,5 +1,5 @@
# Sorts an array in ascending natural order using merge sort.
-merge_sort: list =>
+merge_sort: (list) =>
return list if list.length is 1
diff --git a/examples/computer_science/selection_sort.coffee b/examples/computer_science/selection_sort.coffee
index e8b3b53e..c134b225 100644
--- a/examples/computer_science/selection_sort.coffee
+++ b/examples/computer_science/selection_sort.coffee
@@ -1,5 +1,5 @@
# An in-place selection sort.
-selection_sort: list =>
+selection_sort: (list) =>
len: list.length
# For each item in the list.
diff --git a/examples/documents.coffee b/examples/documents.coffee
deleted file mode 100644
index 31d38d8e..00000000
--- a/examples/documents.coffee
+++ /dev/null
@@ -1,72 +0,0 @@
-# Document Model
-dc.model.Document: dc.Model.extend({
-
- constructor: attributes => this.base(attributes)
-
- # For display, show either the highlighted search results, or the summary,
- # if no highlights are available.
- # The import process will take care of this in the future, but the inline
- # version of the summary has all runs of whitespace squeezed out.
- displaySummary: =>
- text: this.get('highlight') or this.get('summary') or ''
- text and text.replace(/\s+/g, ' ')
-
- # Return a list of the document's metadata. Think about caching this on the
- # document by binding to Metadata, instead of on-the-fly.
- metadata: =>
- docId: this.id
- _.select(Metadata.models(), (meta =>
- _.any(meta.get('instances'), instance =>
- instance.document_id is docId)))
-
- bookmark: pageNumber =>
- bookmark: new dc.model.Bookmark({title: this.get('title'), page_number: pageNumber, document_id: this.id})
- Bookmarks.create(bookmark)
-
- # Inspect.
- toString: => 'Document ' + this.id + ' "' + this.get('title') + '"'
-
-})
-
-# Document Set
-dc.model.DocumentSet: dc.model.RESTfulSet.extend({
-
- resource: 'documents'
-
- SELECTION_CHANGED: 'documents:selection_changed'
-
- constructor: options =>
- this.base(options)
- _.bindAll(this, 'downloadSelectedViewers', 'downloadSelectedPDF', 'downloadSelectedFullText')
-
- selected: => _.select(this.models(), m => m.get('selected'))
-
- selectedIds: => _.pluck(this.selected(), 'id')
-
- countSelected: => this.selected().length
-
- downloadSelectedViewers: =>
- dc.app.download('/download/' + this.selectedIds().join('/') + '/document_viewer.zip')
-
- downloadSelectedPDF: =>
- if this.countSelected() <= 1 then return window.open(this.selected()[0].get('pdf_url'))
- dc.app.download('/download/' + this.selectedIds().join('/') + '/document_pdfs.zip')
-
- downloadSelectedFullText: =>
- if this.countSelected() <= 1 then return window.open(this.selected()[0].get('full_text_url'))
- dc.app.download('/download/' + this.selectedIds().join('/') + '/document_text.zip')
-
- # We override "_onModelEvent" to fire selection changed events when documents
- # change their selected state.
- _onModelEvent: e, model =>
- this.base(e, model)
- fire: e is dc.Model.CHANGED and model.hasChanged('selected')
- if fire then _.defer(_(this.fire).bind(this, this.SELECTION_CHANGED, this))
-
-})
-
-# The main set of Documents, used by the search tab.
-window.Documents: new dc.model.DocumentSet()
-
-# The set of documents that is used to look at a particular label.
-dc.app.LabeledDocuments: new dc.model.DocumentSet()
diff --git a/examples/poignant.coffee b/examples/poignant.coffee
index 5ac07def..836a6155 100644
--- a/examples/poignant.coffee
+++ b/examples/poignant.coffee
@@ -2,7 +2,7 @@
# ['toast', 'cheese', 'wine'].each { |food| print food.capitalize }
-['toast', 'wine', 'cheese'].each(food => print(food.capitalize()))
+['toast', 'wine', 'cheese'].each (food) => print(food.capitalize())
@@ -14,10 +14,10 @@
# end
LotteryTicket: {
- get_picks: => this.picks
- set_picks: nums => this.picks: nums
- get_purchase: => this.purchase
- set_purchase: amount => this.purchase: amount
+ get_picks: () => this.picks
+ set_picks: (nums) => this.picks: nums
+ get_purchase: () => this.purchase
+ set_purchase: (amount) => this.purchase: amount
}
@@ -40,11 +40,11 @@ LotteryTicket: {
# end
LotteryDraw: {
- play: =>
+ play: () =>
result: LotteryTicket.new_random()
winners: {}
- this.tickets.each() buyer, ticket_list =>
- ticket_list.each() ticket =>
+ this.tickets.each (buyer, ticket_list) =>
+ ticket_list.each (ticket) =>
score: ticket.score(result)
return if score is 0
winners[buyer] ||= []
@@ -65,8 +65,8 @@ LotteryDraw: {
# end
WishScanner: {
- scan_for_a_wish: =>
- wish: this.read().detect(thought => thought.index('wish: ') is 0)
+ scan_for_a_wish: () =>
+ wish: this.read().detect((thought) => thought.index('wish: ') is 0)
wish.replace('wish: ', '')
}
@@ -111,7 +111,7 @@ WishScanner: {
Creature : {
# This method applies a hit taken during a fight.
- hit: damage =>
+ hit: (damage) =>
p_up: Math.rand(this.charisma)
if p_up % 9 is 7
this.life += p_up / 4
@@ -120,7 +120,7 @@ Creature : {
if this.life <= 0 then puts("[" + this.name + " has died.]")
# This method takes one turn in a fight.
- fight: enemy, weapon =>
+ fight: (enemy, weapon) =>
if this.life <= 0 then return puts("[" + this.name + "is too dead to fight!]")
# Attack the opponent.
@@ -156,12 +156,12 @@ Creature : {
# Get evil idea and swap in code words
print("Enter your new idea: ")
idea: gets()
-code_words.each(real, code => idea.replace(real, code))
+code_words.each((real, code) => idea.replace(real, code))
# Save the jibberish to a new file
print("File encoded. Please enter a name for this idea: ")
idea_name: gets().strip()
-File.open("idea-" + idea_name + '.txt', 'w', file => file.write(idea))
+File.open("idea-" + idea_name + '.txt', 'w', (file) => file.write(idea))
@@ -177,7 +177,7 @@ File.open("idea-" + idea_name + '.txt', 'w', file => file.write(idea))
# end
# end
-wipe_mutterings_from: sentence =>
+wipe_mutterings_from: (sentence) =>
throw new Error("cannot wipe mutterings") unless sentence.indexOf
while sentence.indexOf('(') >= 0
open: sentence.indexOf('(') - 1
diff --git a/examples/potion.coffee b/examples/potion.coffee
index de8f72c5..06e6a142 100644
--- a/examples/potion.coffee
+++ b/examples/potion.coffee
@@ -8,7 +8,7 @@ print("Odelay!") for i in [1..5]
# add = (x, y): x + y.
# add(2, 4) string print
-add: x, y => x + y
+add: (x, y) => x + y
print(add(2, 4))
@@ -31,7 +31,7 @@ print({language: 'Potion', pointless: true}['language'])
# minus = (x, y): x - y.
# minus (y=10, x=6)
-minus: x, y => x - y
+minus: (x, y) => x - y
minus(6, 10)
@@ -53,8 +53,8 @@ for key, val of {dog: 'canine', cat: 'feline', fox: 'vulpine'}
# Person print = ():
# ('My name is ', /name, '.') join print.
-Person: =>
-Person::print: =>
+Person: () =>
+Person::print: () =>
print('My name is ' + this.name + '.')
@@ -71,9 +71,9 @@ print(p.name)
#
# Policeman ('Constable') print
-Policeman: rank => this.rank: rank
+Policeman: (rank) => this.rank: rank
Policeman extends Person
-Policeman::print: =>
+Policeman::print: () =>
print('My name is ' + this.name + " and I'm a " + this.rank + '.')
print(new Policeman('Constable'))
@@ -115,13 +115,13 @@ table: {
# String length = (): 10.
# this foul business...
-String::length: => 10
+String::length: () => 10
# block = :
# 'potion' print.
-block: =>
+block: () =>
print('potion')
@@ -178,7 +178,7 @@ if (3).gender?
# HomePage get = (url):
# session = url query ? at ('session').
-HomePage::get: url =>
+HomePage::get: (url) =>
session: url.query.session if url.query?
@@ -187,7 +187,7 @@ HomePage::get: url =>
# b /left = BTree ()
# b /right = BTree ()
-BTree: =>
+BTree: () =>
b: new BTree()
b.left: new BTree()
b.right: new BTree()
@@ -199,7 +199,7 @@ b.right: new BTree()
# if (b ? /left):
# 'left path found!' print.
-BTree: =>
+BTree: () =>
b: new BTree()
print('left path found!') if b.left?
diff --git a/examples/syntax_errors.coffee b/examples/syntax_errors.coffee
deleted file mode 100644
index aa72cd71..00000000
--- a/examples/syntax_errors.coffee
+++ /dev/null
@@ -1,20 +0,0 @@
-# Identifiers run together:
-# a b c
-
-# Trailing comma in array:
-# array: [1, 2, 3, 4, 5,]
-
-# Unterminated object literal:
-# obj: { one: 1, two: 2
-
-# Numbers run together:
-# 101 202
-
-# Strings run together:
-# str: "broken" "words"
-
-# Forgot to terminate a function:
-# obj: {
-# first: a => a[0].
-# last: a => a[a.length-1]
-# }
\ No newline at end of file
diff --git a/examples/underscore.coffee b/examples/underscore.coffee
index edc3cb9a..b2dfc129 100644
--- a/examples/underscore.coffee
+++ b/examples/underscore.coffee
@@ -21,7 +21,7 @@
# If Underscore is called as a function, it returns a wrapped object that
# can be used OO-style. This wrapper holds altered versions of all the
# underscore functions. Wrapped objects may be chained.
- wrapper: obj =>
+ wrapper: (obj) =>
this._wrapped: obj
this
@@ -31,7 +31,7 @@
# Create a safe reference to the Underscore object forreference below.
- _: root._: obj => new wrapper(obj)
+ _: root._: (obj) => new wrapper(obj)
# Export the Underscore object for CommonJS.
@@ -54,7 +54,7 @@
# The cornerstone, an each implementation.
# Handles objects implementing forEach, arrays, and raw objects.
- _.each: obj, iterator, context =>
+ _.each: (obj, iterator, context) =>
index: 0
try
return obj.forEach(iterator, context) if obj.forEach
@@ -68,36 +68,36 @@
# Return the results of applying the iterator to each element. Use JavaScript
# 1.6's version of map, if possible.
- _.map: obj, iterator, context =>
+ _.map: (obj, iterator, context) =>
return obj.map(iterator, context) if (obj and _.isFunction(obj.map))
results: []
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
results.push(iterator.call(context, value, index, list))
results
# Reduce builds up a single result from a list of values. Also known as
# inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible.
- _.reduce: obj, memo, iterator, context =>
+ _.reduce: (obj, memo, iterator, context) =>
return obj.reduce(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduce))
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
memo: iterator.call(context, memo, value, index, list)
memo
# The right-associative version of reduce, also known as foldr. Uses
# JavaScript 1.8's version of reduceRight, if available.
- _.reduceRight: obj, memo, iterator, context =>
+ _.reduceRight: (obj, memo, iterator, context) =>
return obj.reduceRight(_.bind(iterator, context), memo) if (obj and _.isFunction(obj.reduceRight))
- _.each(_.clone(_.toArray(obj)).reverse()) value, index =>
+ _.each(_.clone(_.toArray(obj)).reverse()) (value, index) =>
memo: iterator.call(context, memo, value, index, obj)
memo
# Return the first value which passes a truth test.
- _.detect: obj, iterator, context =>
+ _.detect: (obj, iterator, context) =>
result: null
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
if iterator.call(context, value, index, list)
result: value
_.breakLoop()
@@ -106,47 +106,47 @@
# Return all the elements that pass a truth test. Use JavaScript 1.6's
# filter(), if it exists.
- _.select: obj, iterator, context =>
+ _.select: (obj, iterator, context) =>
if obj and _.isFunction(obj.filter) then return obj.filter(iterator, context)
results: []
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
results.push(value) if iterator.call(context, value, index, list)
results
# Return all the elements for which a truth test fails.
- _.reject: obj, iterator, context =>
+ _.reject: (obj, iterator, context) =>
results: []
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
results.push(value) if not iterator.call(context, value, index, list)
results
# Determine whether all of the elements match a truth test. Delegate to
# JavaScript 1.6's every(), if it is present.
- _.all: obj, iterator, context =>
+ _.all: (obj, iterator, context) =>
iterator ||= _.identity
return obj.every(iterator, context) if obj and _.isFunction(obj.every)
result: true
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
_.breakLoop() unless (result: result and iterator.call(context, value, index, list))
result
# Determine if at least one element in the object matches a truth test. Use
# JavaScript 1.6's some(), if it exists.
- _.any: obj, iterator, context =>
+ _.any: (obj, iterator, context) =>
iterator ||= _.identity
return obj.some(iterator, context) if obj and _.isFunction(obj.some)
result: false
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
_.breakLoop() if (result: iterator.call(context, value, index, list))
result
# Determine if a given value is included in the array or object,
# based on '==='.
- _.include: obj, target =>
+ _.include: (obj, target) =>
return _.indexOf(obj, target) isnt -1 if _.isArray(obj)
for key, val of obj
return true if val is target
@@ -154,41 +154,41 @@
# Invoke a method with arguments on every item in a collection.
- _.invoke: obj, method =>
+ _.invoke: (obj, method) =>
args: _.rest(arguments, 2)
(if method then val[method] else val).apply(val, args) for val in obj
# Convenience version of a common use case of map: fetching a property.
- _.pluck: obj, key =>
- _.map(obj, (val => val[key]))
+ _.pluck: (obj, key) =>
+ _.map(obj, ((val) => val[key]))
# Return the maximum item or (item-based computation).
- _.max: obj, iterator, context =>
+ _.max: (obj, iterator, context) =>
return Math.max.apply(Math, obj) if not iterator and _.isArray(obj)
result: {computed: -Infinity}
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
computed: if iterator then iterator.call(context, value, index, list) else value
computed >= result.computed and (result: {value: value, computed: computed})
result.value
# Return the minimum element (or element-based computation).
- _.min: obj, iterator, context =>
+ _.min: (obj, iterator, context) =>
return Math.min.apply(Math, obj) if not iterator and _.isArray(obj)
result: {computed: Infinity}
- _.each(obj) value, index, list =>
+ _.each(obj) (value, index, list) =>
computed: if iterator then iterator.call(context, value, index, list) else value
computed < result.computed and (result: {value: value, computed: computed})
result.value
# Sort the object's values by a criteria produced by an iterator.
- _.sortBy: obj, iterator, context =>
- _.pluck(((_.map(obj) value, index, list =>
+ _.sortBy: (obj, iterator, context) =>
+ _.pluck(((_.map(obj) (value, index, list) =>
{value: value, criteria: iterator.call(context, value, index, list)}
- ).sort() left, right =>
+ ).sort() (left, right) =>
a: left.criteria; b: right.criteria
if a < b then -1 else if a > b then 1 else 0
), 'value')
@@ -196,7 +196,7 @@
# Use a comparator function to figure out at what index an object should
# be inserted so as to maintain order. Uses binary search.
- _.sortedIndex: array, obj, iterator =>
+ _.sortedIndex: (array, obj, iterator) =>
iterator ||= _.identity
low: 0; high: array.length
while low < high
@@ -206,7 +206,7 @@
# Convert anything iterable into a real, live array.
- _.toArray: iterable =>
+ _.toArray: (iterable) =>
return [] if (!iterable)
return iterable.toArray() if (iterable.toArray)
return iterable if (_.isArray(iterable))
@@ -215,7 +215,7 @@
# Return the number of elements in an object.
- _.size: obj => _.toArray(obj).length
+ _.size: (obj) => _.toArray(obj).length
# -------------------------- Array Functions: ------------------------------
@@ -223,7 +223,7 @@
# Get the first element of an array. Passing "n" will return the first N
# values in the array. Aliased as "head". The "guard" check allows it to work
# with _.map.
- _.first: array, n, guard =>
+ _.first: (array, n, guard) =>
if n and not guard then slice.call(array, 0, n) else array[0]
@@ -231,35 +231,35 @@
# Especially useful on the arguments object. Passing an "index" will return
# the rest of the values in the array from that index onward. The "guard"
# check allows it to work with _.map.
- _.rest: array, index, guard =>
+ _.rest: (array, index, guard) =>
slice.call(array, if _.isUndefined(index) or guard then 1 else index)
# Get the last element of an array.
- _.last: array => array[array.length - 1]
+ _.last: (array) => array[array.length - 1]
# Trim out all falsy values from an array.
- _.compact: array => array[i] for i in [0...array.length] when array[i]
+ _.compact: (array) => array[i] for i in [0...array.length] when array[i]
# Return a completely flattened version of an array.
- _.flatten: array =>
- _.reduce(array, []) memo, value =>
+ _.flatten: (array) =>
+ _.reduce(array, []) (memo, value) =>
return memo.concat(_.flatten(value)) if _.isArray(value)
memo.push(value)
memo
# Return a version of the array that does not contain the specified value(s).
- _.without: array =>
+ _.without: (array) =>
values: _.rest(arguments)
val for val in _.toArray(array) when not _.include(values, val)
# Produce a duplicate-free version of the array. If the array has already
# been sorted, you have the option of using a faster algorithm.
- _.uniq: array, isSorted =>
+ _.uniq: (array, isSorted) =>
memo: []
for el, i in _.toArray(array)
memo.push(el) if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el))
@@ -268,28 +268,27 @@
# Produce an array that contains every item shared between all the
# passed-in arrays.
- _.intersect: array =>
+ _.intersect: (array) =>
rest: _.rest(arguments)
- _.select(_.uniq(array)) item =>
- _.all(rest) other =>
+ _.select(_.uniq(array)) (item) =>
+ _.all(rest) (other) =>
_.indexOf(other, item) >= 0
# Zip together multiple lists into a single array -- elements that share
# an index go together.
- _.zip: =>
- args: _.toArray(arguments)
- length: _.max(_.pluck(args, 'length'))
+ _.zip: () =>
+ length: _.max(_.pluck(arguments, 'length'))
results: new Array(length)
for i in [0...length]
- results[i]: _.pluck(args, String(i))
+ results[i]: _.pluck(arguments, String(i))
results
# If the browser doesn't supply us with indexOf (I'm looking at you, MSIE),
# we need this function. Return the position of the first occurence of an
# item in an array, or -1 if the item is not included in the array.
- _.indexOf: array, item =>
+ _.indexOf: (array, item) =>
return array.indexOf(item) if array.indexOf
i: 0; l: array.length
while l - i
@@ -299,7 +298,7 @@
# Provide JavaScript 1.6's lastIndexOf, delegating to the native function,
# if possible.
- _.lastIndexOf: array, item =>
+ _.lastIndexOf: (array, item) =>
return array.lastIndexOf(item) if array.lastIndexOf
i: array.length
while i
@@ -310,8 +309,8 @@
# Generate an integer Array containing an arithmetic progression. A port of
# the native Python range() function. See:
# http://docs.python.org/library/functions.html#range
- _.range: start, stop, step =>
- a: _.toArray(arguments)
+ _.range: (start, stop, step) =>
+ a: arguments
solo: a.length <= 1
i: start: if solo then 0 else a[0];
stop: if solo then a[0] else a[1];
@@ -331,45 +330,45 @@
# Create a function bound to a given object (assigning 'this', and arguments,
# optionally). Binding with arguments is also known as 'curry'.
- _.bind: func, obj =>
+ _.bind: (func, obj) =>
args: _.rest(arguments, 2)
- => func.apply(obj or root, args.concat(_.toArray(arguments)))
+ () => func.apply(obj or root, args.concat(arguments))
# Bind all of an object's methods to that object. Useful for ensuring that
# all callbacks defined on an object belong to it.
- _.bindAll: obj =>
+ _.bindAll: (obj) =>
funcs: if arguments.length > 1 then _.rest(arguments) else _.functions(obj)
- _.each(funcs, (f => obj[f]: _.bind(obj[f], obj)))
+ _.each(funcs, (f) => obj[f]: _.bind(obj[f], obj))
obj
# Delays a function for the given number of milliseconds, and then calls
# it with the arguments supplied.
- _.delay: func, wait =>
+ _.delay: (func, wait) =>
args: _.rest(arguments, 2)
- setTimeout((=> func.apply(func, args)), wait)
+ setTimeout((() => func.apply(func, args)), wait)
# Defers a function, scheduling it to run after the current call stack has
# cleared.
- _.defer: func =>
+ _.defer: (func) =>
_.delay.apply(_, [func, 1].concat(_.rest(arguments)))
# Returns the first function passed as an argument to the second,
# allowing you to adjust arguments, run code before and after, and
# conditionally execute the original function.
- _.wrap: func, wrapper =>
- => wrapper.apply(wrapper, [func].concat(_.toArray(arguments)))
+ _.wrap: (func, wrapper) =>
+ () => wrapper.apply(wrapper, [func].concat(arguments))
# Returns a function that is the composition of a list of functions, each
# consuming the return value of the function that follows.
- _.compose: =>
- funcs: _.toArray(arguments)
- =>
- args: _.toArray(arguments)
+ _.compose: () =>
+ funcs: arguments
+ () =>
+ args: arguments
for i in [(funcs.length - 1)..0]
args: [funcs[i].apply(this, args)]
args[0]
@@ -378,43 +377,43 @@
# ------------------------- Object Functions: ----------------------------
# Retrieve the names of an object's properties.
- _.keys: obj =>
+ _.keys: (obj) =>
return _.range(0, obj.length) if _.isArray(obj)
key for key, val of obj
# Retrieve the values of an object's properties.
- _.values: obj =>
+ _.values: (obj) =>
_.map(obj, _.identity)
# Return a sorted list of the function names available in Underscore.
- _.functions: obj =>
- _.select(_.keys(obj), key => _.isFunction(obj[key])).sort()
+ _.functions: (obj) =>
+ _.select(_.keys(obj), (key) => _.isFunction(obj[key])).sort()
# Extend a given object with all of the properties in a source object.
- _.extend: destination, source =>
+ _.extend: (destination, source) =>
for key, val of source
destination[key]: val
destination
# Create a (shallow-cloned) duplicate of an object.
- _.clone: obj =>
+ _.clone: (obj) =>
return obj.slice(0) if _.isArray(obj)
_.extend({}, obj)
# Invokes interceptor with the obj, and then returns obj.
# The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.
- _.tap: obj, interceptor =>
+ _.tap: (obj, interceptor) =>
interceptor(obj)
obj
# Perform a deep comparison to check if two objects are equal.
- _.isEqual: a, b =>
+ _.isEqual: (a, b) =>
# Check object identity.
return true if a is b
# Different types?
@@ -450,81 +449,81 @@
# Is a given array or object empty?
- _.isEmpty: obj => _.keys(obj).length is 0
+ _.isEmpty: (obj) => _.keys(obj).length is 0
# Is a given value a DOM element?
- _.isElement: obj => obj and obj.nodeType is 1
+ _.isElement: (obj) => obj and obj.nodeType is 1
# Is a given value an array?
- _.isArray: obj => !!(obj and obj.concat and obj.unshift)
+ _.isArray: (obj) => !!(obj and obj.concat and obj.unshift)
# Is a given variable an arguments object?
- _.isArguments: obj => obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length')
+ _.isArguments: (obj) => obj and _.isNumber(obj.length) and !_.isArray(obj) and !propertyIsEnumerable.call(obj, 'length')
# Is the given value a function?
- _.isFunction: obj => !!(obj and obj.constructor and obj.call and obj.apply)
+ _.isFunction: (obj) => !!(obj and obj.constructor and obj.call and obj.apply)
# Is the given value a string?
- _.isString: obj => !!(obj is '' or (obj and obj.charCodeAt and obj.substr))
+ _.isString: (obj) => !!(obj is '' or (obj and obj.charCodeAt and obj.substr))
# Is a given value a number?
- _.isNumber: obj => toString.call(obj) is '[object Number]'
+ _.isNumber: (obj) => toString.call(obj) is '[object Number]'
# Is a given value a Date?
- _.isDate: obj => !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear)
+ _.isDate: (obj) => !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear)
# Is the given value a regular expression?
- _.isRegExp: obj => !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false))
+ _.isRegExp: (obj) => !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false))
# Is the given value NaN -- this one is interesting. NaN != NaN, and
# isNaN(undefined) == true, so we make sure it's a number first.
- _.isNaN: obj => _.isNumber(obj) and window.isNaN(obj)
+ _.isNaN: (obj) => _.isNumber(obj) and window.isNaN(obj)
# Is a given value equal to null?
- _.isNull: obj => obj is null
+ _.isNull: (obj) => obj is null
# Is a given variable undefined?
- _.isUndefined: obj => typeof obj is 'undefined'
+ _.isUndefined: (obj) => typeof obj is 'undefined'
# -------------------------- Utility Functions: --------------------------
# Run Underscore.js in noConflict mode, returning the '_' variable to its
# previous owner. Returns a reference to the Underscore object.
- _.noConflict: =>
+ _.noConflict: () =>
root._: previousUnderscore
this
# Keep the identity function around for default iterators.
- _.identity: value => value
+ _.identity: (value) => value
# Break out of the middle of an iteration.
- _.breakLoop: => throw breaker
+ _.breakLoop: () => throw breaker
# Generate a unique integer id (unique within the entire client session).
# Useful for temporary DOM ids.
idCounter: 0
- _.uniqueId: prefix =>
+ _.uniqueId: (prefix) =>
(prefix or '') + idCounter++
# JavaScript templating a-la ERB, pilfered from John Resig's
# "Secrets of the JavaScript Ninja", page 83.
- _.template: str, data =>
+ _.template: (str, data) =>
`var fn = new Function('obj',
'var p=[],print=function(){p.push.apply(p,arguments);};' +
'with(obj){p.push(\'' +
@@ -556,39 +555,38 @@
# /*------------------------ Setup the OOP Wrapper: --------------------------*/
# Helper function to continue chaining intermediate results.
- result: obj, chain =>
+ result: (obj, chain) =>
if chain then _(obj).chain() else obj
# Add all of the Underscore functions to the wrapper object.
- _.each(_.functions(_)) name =>
+ _.each(_.functions(_)) (name) =>
method: _[name]
- wrapper.prototype[name]: =>
- args: _.toArray(arguments)
- unshift.call(args, this._wrapped)
+ wrapper.prototype[name]: () =>
+ unshift.call(arguments, this._wrapped)
result(method.apply(_, args), this._chain)
# Add all mutator Array functions to the wrapper.
- _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) name =>
+ _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift']) (name) =>
method: Array.prototype[name]
- wrapper.prototype[name]: =>
+ wrapper.prototype[name]: () =>
method.apply(this._wrapped, arguments)
result(this._wrapped, this._chain)
# Add all accessor Array functions to the wrapper.
- _.each(['concat', 'join', 'slice']) name =>
+ _.each(['concat', 'join', 'slice']) (name) =>
method: Array.prototype[name]
- wrapper.prototype[name]: =>
+ wrapper.prototype[name]: () =>
result(method.apply(this._wrapped, arguments), this._chain)
# Start chaining a wrapped Underscore object.
- wrapper::chain: =>
+ wrapper::chain: () =>
this._chain: true
this
# Extracts the result from a wrapped and chained object.
- wrapper::value: => this._wrapped
+ wrapper::value: () => this._wrapped
diff --git a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage
index f394402b..850870fe 100644
--- a/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage
+++ b/extras/CoffeeScript.tmbundle/Syntaxes/CoffeeScript.tmLanguage
@@ -19,17 +19,12 @@
-e, --eval
Compile and print a little snippet of CoffeeScript directly from the
- command line (or from stdin). For example:
coffee -e "square: x => x * x"
+ command line (or from stdin). For example:
coffee -e "square: (x) => x * x"
square: x => x * x -cube: x => square(x) * x +square: (x) => x * x +cube: (x) => square(x) * xvar cube, square; square = function square(x) { return x * x; @@ -375,7 +375,7 @@ cube = function cube(x) { ;alert(cube(5));'>run: cube(5)If you'd like to create an anonymous function, just wrap it in parentheses: - (x => x * x) + ((x) => x * x)
@@ -444,7 +444,7 @@ matrix = [1, 0, 1, 0, 0, 1, 1, 1, 0]; var yourself.
num: 1 -change_numbers: => +change_numbers: () => new_num: -1 num: 10 new_num: change_numbers() @@ -615,7 +615,7 @@ car.speed < speed_limit ? accelerate() :gold: silver: the_field: "unknown" -medalists: first, second, rest... => +medalists: (first, second, rest...) => gold: first silver: second the_field: rest @@ -675,7 +675,7 @@ alert("The Field: " + the_field); Array methods available. -backwards: => +backwards: () => alert arguments.reverse() backwards "stairway", "to", "heaven" @@ -807,7 +807,7 @@ __d = asteroids;countdown: num for num in [10..1] -egg_delivery: => +egg_delivery: () => for i in [0...eggs.length] by 12 dozen_eggs: eggs[i...i+12] deliver new egg_carton(dozen) @@ -945,7 +945,7 @@ numbers.splice.apply(numbers, [3, 6 - 3 + 1].concat([-3, -4, -5, -6])); pushed down into each possible branch of execution, in the function below. -grade: student => +grade: (student) => if student.excellent_work "A+" else if student.okay_stuff @@ -1078,19 +1078,19 @@ globals = ((function() { object's prototype, and converts super() into a call against the immediate ancestor's method of the same name. -Animal: => -Animal::move: meters => +Animal: () => +Animal::move: (meters) => alert this.name + " moved " + meters + "m." -Snake: name => this.name: name +Snake: (name) => this.name: name Snake extends Animal -Snake::move: => +Snake::move: () => alert "Slithering..." super 5 -Horse: name => this.name: name +Horse: (name) => this.name: name Horse extends Animal -Horse::move: => +Horse::move: () => alert "Galloping..." super 45 @@ -1186,8 +1186,8 @@ tom.move(); final functions easier to pass, CoffeeScript includes block syntax, so you don't have to close the parentheses on the other side. -$('table.list').each() table => - $('tr.account', table).each() row => +-$('table.list').each (table) => + $('tr.account', table).each (row) => row.show() row.highlight()$('table.list').each(function(table) { @@ -1197,11 +1197,6 @@ tom.move(); }); });- If you prefer not to use blocks, you'll need to add a pair of parentheses - to help distinguish the arguments from the definition of the function: - _.map(array, (num => num * 2)) -
Pattern Matching (Destructuring Assignment) @@ -1234,7 +1229,7 @@ and_switch = __a[1]; But it's also helpful for dealing with functions that return multiple values.
-weather_report: location => +weather_report: (location) => # Make an Ajax request to fetch the weather... [location, 72, "Mostly Sunny"] @@ -1316,11 +1311,11 @@ city = __c[1]; to use with bind. Functions created with the long arrow are able to access properties of the this where they're defined. -Account: customer, cart => +Account: (customer, cart) => this.customer: customer this.cart: cart - $('.shopping_cart').bind('click') event ==> + $('.shopping_cart').bind('click') (event) ==> this.customer.purchase this.cartvar Account; Account = function Account(customer, cart) { diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 617bda01..ce1eaac7 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -5,7 +5,7 @@ token IF ELSE UNLESS token NUMBER STRING REGEX token TRUE FALSE YES NO ON OFF token IDENTIFIER PROPERTY_ACCESS PROTOTYPE_ACCESS SOAK_ACCESS -token CODE PARAM NEW RETURN +token CODE PARAM_START PARAM PARAM_END NEW RETURN token TRY CATCH FINALLY THROW token BREAK CONTINUE token FOR IN OF BY WHEN WHILE @@ -200,8 +200,10 @@ rule # Function definition. Code: - ParamList FuncGlyph Block { result = CodeNode.new(val[0], val[2], val[1]) } - | FuncGlyph Block { result = CodeNode.new([], val[1], val[0]) } + PARAM_START ParamList PARAM_END + FuncGlyph Block { result = CodeNode.new(val[1], val[4], val[3]) } + | PARAM_START PARAM_END + FuncGlyph Block { result = CodeNode.new([], val[3], val[2]) } ; # The symbols to signify functions, and bound functions. diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index 6dcf7a1c..bf4ff7f9 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -242,19 +242,15 @@ module CoffeeScript # make use of splats. def tag_parameters i = 0 - tagged = false loop do i -= 1 tok = @tokens[i] return if !tok - if ['.', ','].include?(tok[0]) - tagged = false - next + case tok[0] + when :IDENTIFIER then tok[0] = :PARAM + when ')' then tok[0] = :PARAM_END + when '(' then return tok[0] = :PARAM_START end - return if tagged - return if tok[0] != :IDENTIFIER - tok[0] = :PARAM - tagged = true end end diff --git a/lib/coffee_script/narwhal/coffee-script.coffee b/lib/coffee_script/narwhal/coffee-script.coffee index d3bc2b33..ce0ba011 100644 --- a/lib/coffee_script/narwhal/coffee-script.coffee +++ b/lib/coffee_script/narwhal/coffee-script.coffee @@ -12,14 +12,14 @@ Readline: require('readline') coffeePath: File.path(module.path).dirname().dirname().dirname().dirname().dirname().join('bin', 'coffee') # Our general-purpose error handler. -checkForErrors: coffeeProcess => +checkForErrors: (coffeeProcess) => return true if coffeeProcess.wait() is 0 system.stderr.print(coffeeProcess.stderr.read()) throw new Error("CoffeeScript compile error") # Run a simple REPL, round-tripping to the CoffeeScript compiler for every # command. -exports.run: args => +exports.run: (args) => if args.length for path, i in args exports.evalCS(File.read(path)) @@ -35,24 +35,24 @@ exports.run: args => print(e) # Compile a given CoffeeScript file into JavaScript. -exports.compileFile: path => +exports.compileFile: (path) => coffee: OS.popen([coffeePath, "--print", "--no-wrap", path]) checkForErrors(coffee) coffee.stdout.read() # Compile a string of CoffeeScript into JavaScript. -exports.compile: source, flags => +exports.compile: (source, flags) => coffee: OS.popen([coffeePath, "--eval", "--no-wrap"].concat(flags or [])) coffee.stdin.write(source).flush().close() checkForErrors(coffee) coffee.stdout.read() # Evaluating a string of CoffeeScript first compiles it externally. -exports.evalCS: source, flags => +exports.evalCS: (source, flags) => eval(exports.compile(source, flags)) # Make a factory for the CoffeeScript environment. -exports.makeNarwhalFactory: path => +exports.makeNarwhalFactory: (path) => code: exports.compileFile(path) factoryText: "function(require,exports,module,system,print){" + code + "/**/\n}" if system.engine is "rhino" diff --git a/lib/coffee_script/narwhal/loader.coffee b/lib/coffee_script/narwhal/loader.coffee index ea6e2a0e..5012286f 100644 --- a/lib/coffee_script/narwhal/loader.coffee +++ b/lib/coffee_script/narwhal/loader.coffee @@ -6,12 +6,12 @@ factories: {} loader: { # Reload the coffee-script environment from source. - reload: topId, path => + reload: (topId, path) => coffeescript ||= require('coffee-script') - factories[topId]: => coffeescript.makeNarwhalFactory(path) + factories[topId]: () => coffeescript.makeNarwhalFactory(path) # Ensure that the coffee-script environment is loaded. - load: topId, path => + load: (topId, path) => factories[topId] ||= this.reload(topId, path) } diff --git a/lib/coffee_script/parse_error.rb b/lib/coffee_script/parse_error.rb index 0f23bc92..4903deb5 100644 --- a/lib/coffee_script/parse_error.rb +++ b/lib/coffee_script/parse_error.rb @@ -18,7 +18,7 @@ module CoffeeScript def message line = @value.respond_to?(:line) ? @value.line : "END" line_part = "line #{line}:" - id_part = @token_id != @value.to_s ? "unexpected #{@token_id.to_s.downcase}" : "" + id_part = @token_id != @value.to_s ? " unexpected #{@token_id.to_s.downcase}" : "" val_part = @message || "for #{TOKEN_MAP[@value.to_s] || "'#{@value}'"}" "#{line_part} syntax error, #{val_part}#{id_part}" end diff --git a/lib/coffee_script/parser.rb b/lib/coffee_script/parser.rb index a375ea28..deb2bc33 100644 --- a/lib/coffee_script/parser.rb +++ b/lib/coffee_script/parser.rb @@ -10,7 +10,7 @@ module CoffeeScript class Parser < Racc::Parser -module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 449) +module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 451) # Lex and parse a CoffeeScript. def parse(code) # Uncomment the following line to enable grammar debugging, in combination @@ -34,319 +34,301 @@ module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 449) ##### State transition tables begin ### clist = [ -'106,9,114,20,24,27,32,36,40,46,50,55,61,276,270,271,178,1,5,11,14,18', -'276,22,28,33,122,126,30,30,18,99,63,265,72,115,3,6,30,15,266,18,26,218', -'30,111,1,44,48,53,59,136,139,102,105,109,113,118,121,125,129,132,135', -'138,101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116', -'119,123,127,130,133,302,51,56,149,151,152,71,173,2,9,10,183,20,24,27', -'32,36,40,46,50,55,61,294,149,151,152,1,5,11,14,51,56,22,28,33,35,80', -'30,189,242,57,63,97,72,79,3,6,80,15,241,18,26,184,185,276,79,44,48,53', -'59,64,68,18,51,56,293,13,141,62,66,111,191,192,18,30,76,136,139,102', -'105,109,150,62,66,18,155,149,151,152,191,192,149,151,152,239,51,56,149', -'151,152,71,150,2,9,10,155,20,24,27,32,36,40,46,50,55,61,153,149,151', -'152,1,5,11,14,30,80,22,28,33,35,80,62,66,79,57,63,249,72,79,3,6,249', -'15,284,18,26,62,66,62,66,44,48,53,59,64,68,270,271,145,111,13,91,18', -'157,150,-181,-181,18,155,150,111,62,66,155,1,150,136,139,30,155,62,66', -'251,273,263,62,66,251,275,51,56,30,145,262,71,150,2,9,10,155,20,24,27', -'32,36,40,46,50,55,61,187,249,190,30,1,5,11,14,256,111,22,28,33,35,85', -'-181,-181,179,57,63,255,72,80,3,6,111,15,309,18,26,79,-181,-181,75,44', -'48,53,59,64,68,97,,,,13,62,66,251,,252,,111,62,66,176,,111,136,139,18', -',76,136,139,102,105,109,113,118,121,125,129,,51,56,,,,71,,2,9,10,,20', -'24,27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22,28,33,35,62', -'66,176,,57,63,177,72,,3,6,111,15,,18,26,,136,139,,44,48,53,59,64,68', -'111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104', -'108,112,117,120,124,128,,,111,,,,51,56,-181,-181,,71,,2,9,10,,20,24', -'27,32,36,40,46,50,55,61,,,111,,1,5,11,14,-181,-181,22,28,33,35,,,,,57', -'63,,72,,3,6,111,15,,18,26,,-181,-181,,44,48,53,59,64,68,111,,,,13,,136', -'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117', -'120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', -'53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135', -'138,101,104,108,112,117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24', -'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3', -'6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113', -'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,,,,,,,51', -'56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28', -'33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13', -',136,139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112', -'117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55', -'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44', -'48,53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132', -'135,138,101,104,108,112,117,120,124,128,,,,,,,51,56,,,,71,,2,9,10,,20', -'24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72', -',3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109', -'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,,,,', -',,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,', -',22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111', -',,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104,108', -'112,117,120,124,128,,299,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40', -'46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26', -',,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113,118,121,125', -'129,132,135,138,111,,,,,,136,139,102,105,109,113,118,,51,56,,,,71,,2', -'9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,', -'57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102', -'105,109,113,118,121,125,129,132,135,138,111,,,,,,136,139,102,105,109', -'113,118,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', -'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,95,,,44,48,53,59', -'64,68,111,,,,13,,136,139,102,105,109,113,118,121,125,129,132,135,138', -'111,,,,,,136,139,102,105,109,113,118,,51,56,,,,71,,2,9,10,,20,24,27', -'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', -',15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136,139,102,105,109,113', -'118,121,125,129,132,135,138,111,,,,,,136,139,102,105,109,,,,51,56,,', -',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33', -'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,111,,,,13,,136', -'139,102,105,109,113,118,121,125,129,111,,,,,,136,139,102,105,109,113', -'118,121,125,129,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', -'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', -'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', -'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,282,,,,44,48,53,59', -'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,62,66,,71,,2,9,10,,20', -'24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72', -',3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14', -',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,', -',,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36', -'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18', -'26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,', -',71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33', -'35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55', -'61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44', -'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10', -',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', -'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', -'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', -'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', -',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', -'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', -',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', -',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', -',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,170,,,,44', -'48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10', -',20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', -'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', -'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', -'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', -',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', -'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', -',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', -',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', -',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', -'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', -'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1', -'5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59', -'64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24', -'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3', -'6,,15,,18,26,170,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14', -',,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,', -',,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36', -'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18', -'26,30,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56', -'62,66,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', -'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', -',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', -',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', -',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', -'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', -'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', -'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', -'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', -'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', -',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', -'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', -',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', -',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', -',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', -'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', -'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', -'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', -'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', -'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', -',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', -'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', -',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', -',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', -',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', -'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', -'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', -'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', -'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', -'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', -',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46', -'50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,', -',,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71', -',2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,', -',,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61', -',,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48', -'53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,', -'20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63', -',72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5', -'11,14,,,22,28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64', -'68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,51,56,,,,71,,2,9,10,,20,24,27', -'32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,57,63,,72,,3,6', -',15,,18,26,,,,,44,48,53,59,64,68,,,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'51,56,,,,71,,2,9,10,,20,24,27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22', -'28,33,35,,,,,57,63,,72,,3,6,,15,,18,26,,,,,44,48,53,59,64,68,,,,,13', -'20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,,,,,,51,56,,,,71,,2,15', -'10,,26,,,106,,114,20,24,27,32,36,40,46,50,55,61,,,,,,,,,,,,28,33,122', -'126,,,,99,,,,115,,,,15,,,26,,,111,71,,2,,10,136,139,102,105,109,113', -'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', -'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,71,310,2,,10', -',,,,,,,,,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105', -'109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128', -'131,134,137,100,103,107,110,116,119,254,127,130,133,,,,,,,,274,20,24', -'27,32,36,40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,35,,,,,,63,,72,,3,6', -',15,,18,26,,,,,44,48,53,59,64,68,106,,114,,13,,,,,,,,,,,,,,,,,,,,,,122', -'126,,,,99,,51,56,115,,,71,,2,,10,,,111,,,,,,136,139,102,105,109,113', -'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', -'137,100,103,107,110,116,119,123,127,130,133,,,,,,,,306,20,24,27,32,36', -'40,46,50,55,61,,,,,1,5,11,14,,,22,28,33,,,,,,,63,,72,,3,6,,15,,18,26', -',,,,44,48,53,59,64,68,106,,114,,13,,,,,,,,,,,,,,,,,,,,,,122,126,,,,99', -',51,56,115,,,71,,2,,10,30,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,254,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,,,,,', -'122,126,,,,99,,,,115,,,,,,,,248,,111,,,,,,136,139,102,105,109,113,118', -'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137', -'100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,', -',,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118', -'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137', -'100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,,,,,', -',,,,122,126,,,,99,,,,115,,,,,,,,30,,111,,,,,,136,139,102,105,109,113', -'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', -'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,', -',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113', -'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', -'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,', -',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113', -'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', -'137,100,103,107,110,116,119,123,127,130,133,106,,114,,,,,,,,,,,,,,,', -',,,,,,,,122,126,,,,99,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113', -'118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134', -'137,100,103,107,110,116,119,123,127,130,133,122,126,,,,,,,,115,,,,,', -',,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138,101', -'104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119,123', -'127,130,133,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109', -'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131', -'134,137,100,103,107,110,116,119,123,127,130,133,122,126,,,,,,,,115,', -',,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138', -'101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119', -'123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118', -'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137', -'100,103,107,110,116,119,123,122,126,,,,,,,,115,,,,,,,,,,111,,,,,,136', -'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117', -'120,124,128,131,134,137,100,103,107,110,116,119,123,122,126,,,,,,,,115', -',,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138', -'101,104,108,112,117,120,124,128,131,134,137,100,103,107,110,116,119', -'123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121', -'125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100', -'103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102', -'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124', -'128,131,134,137,100,103,107,110,116,119,123,126,,,,,,,,115,,,,,,,,,', -'111,,,,,,136,139,102,105,109,113,118,121,125,129,132,135,138,101,104', -'108,112,117,120,124,128,131,134,137,100,103,107,110,116,119,123,126', -',,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109,113,118,121,125,129', -'132,135,138,101,104,108,112,117,120,124,128,131,134,137,100,103,107', -'110,116,119,123,126,,,,,,,,115,,,,,,,,,,111,,,,,,136,139,102,105,109', -'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131', -'134,137,100,103,107,110,116,119,123,115,,,,,,,,,,111,,,,,,136,139,102', -'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124', -'128,131,134,137,100,103,107,110,116,119,115,,,,,,,,,,111,,,,,,136,139', -'102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120', -'124,128,131,134,137,100,103,107,110,116,119,115,,,,,,,,,,111,,,,,,136', -'139,102,105,109,113,118,121,125,129,132,135,138,101,104,108,112,117', -'120,124,128,131,134,137,100,103,107,110,116,119,111,,,,,,136,139,102', -'105,109,113,118,121,125,129,132,135,138,101,104,108,112,117,120,124', -'128,131,134,137,100,103,107,110,116,119,111,,,,,,136,139,102,105,109', -'113,118,121,125,129,132,135,138,101,104,108,112,117,120,124,128,131', -'134,137,100,103,107,110,116,119,111,,,,,,136,139,102,105,109,113,118', -'121,125,129,132,135,138,101,104,108,112,117,120,124,128,131,134,137', -'100,103,107,110,116,119,111,,,,,,136,139,102,105,109,113,118,121,125', -'129,132,135,138,101,104,108,112,117,120,124,128,131,134,137,100,103', -'107,110,116,119,111,,,,,,136,139,102,105,109,113,118,121,125,129,132', -'135,138,101,104,108,112,117,120,124,128,131,134,137,100,103,107,110', -'116,119' ] - racc_action_table = arr = Array.new(9789, nil) +'117,37,125,21,24,25,29,34,39,44,47,50,54,130,202,203,285,285,108,-181', +'-181,169,277,278,27,27,35,40,140,144,81,83,84,118,171,172,37,133,287', +'130,37,19,1,130,32,-181,-181,130,309,-181,-181,60,65,113,116,121,124', +'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146', +'149,111,114,119,122,126,129,134,137,141,145,148,110,81,83,84,81,83,84', +'2,168,8,7,18,194,21,24,25,29,34,39,44,47,50,54,200,85,7,72,1,78,175', +'14,17,22,93,175,30,35,40,42,277,278,92,255,61,63,182,3,37,9,11,130,19', +'37,27,32,258,113,116,183,49,52,55,58,67,69,171,172,60,65,16,37,152,27', +'60,65,177,130,178,60,65,177,85,113,116,85,78,262,37,78,81,83,84,81,83', +'84,102,299,81,83,84,60,65,261,2,184,8,7,18,264,21,24,25,29,34,39,44', +'47,50,54,60,65,170,175,1,159,37,14,17,22,130,285,30,35,40,42,-181,-181', +'281,27,61,63,300,3,191,9,11,95,19,192,27,32,74,60,65,189,49,52,55,58', +'67,69,72,73,202,203,16,60,65,177,85,234,157,85,78,270,93,78,85,60,65', +'130,78,108,92,37,7,113,116,21,24,25,29,34,39,44,47,50,54,271,2,37,8', +'1,18,273,14,17,22,198,93,30,35,40,42,27,311,89,92,61,63,274,3,93,9,11', +'130,19,152,27,32,92,-181,-181,201,49,52,55,58,67,69,130,60,65,,16,130', +'-181,-181,27,93,89,113,116,121,124,128,130,92,195,196,,27,-181,-181', +'7,60,65,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,27,30,35', +'40,42,60,65,189,,61,63,190,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69', +'130,,,,16,,113,116,121,124,128,132,136,139,143,147,150,112,115,,,,,', +'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42', +',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116', +'121,124,128,132,136,139,143,147,150,112,115,,,,,,7,,,21,24,25,29,34', +'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11', +',19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124,128,132', +'136,139,143,147,150,112,115,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,', +'2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,', +'49,52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147', +'150,112,115,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17', +'22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69', +'130,,,,16,,113,116,121,124,128,132,136,139,143,147,,,,,,,,,7,,,21,24', +'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63', +',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124', +'128,132,136,139,143,147,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2', +',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49', +'52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147,,', +',,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35', +'40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16', +',113,116,121,124,128,132,136,130,,,,,,113,116,121,124,128,7,,,21,24', +'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63', +',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124', +'128,132,136,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18', +',14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58', +'67,69,130,,,,16,,113,116,121,124,128,132,136,,,,,,,,,,,,7,,,21,24,25', +'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3', +',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,', +',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,', +',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,', +',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30', +'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16', +',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14', +'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,105,,,49,52,55,58', +'67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2', +',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49', +'52,55,58,67,69,130,,,,16,,113,116,121,124,128,132,136,139,143,147,150', +'112,115,120,123,127,131,135,138,142,146,,291,,,,,,,,,,2,,8,7,18,,21', +'24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22,,,30,35,40,42,,,,,61,63', +',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,', +'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42', +',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,', +',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30', +'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16', +',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14', +'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67', +'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8', +'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52', +'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50', +'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32', +',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39', +'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19', +',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25', +'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3', +',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,', +',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,', +',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,', +',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30', +'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16', +',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14', +'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67', +'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8', +'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52', +'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50', +'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32', +',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39', +'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19', +',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25', +'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3', +',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,', +',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,', +',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,', +',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30', +'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16', +',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14', +'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67', +'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8', +'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52', +'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50', +'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32', +'74,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34', +'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11', +',19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24', +'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63', +',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,', +'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42', +',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,', +',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30', +'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16', +',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14', +'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67', +'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8', +'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52', +'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50', +'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32', +',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39', +'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19', +',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25', +'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3', +',9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,', +',21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,', +',,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,', +',,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30', +'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,74,,,,49,52,55,58,67,69,,,,,16', +',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14', +'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67', +'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8', +'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52', +'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50', +'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32', +',,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39', +'44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19', +',27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25', +'29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3', +',9,11,,19,,27,32,37,,,,49,52,55,58,67,69,130,,,,16,,113,116,121,124', +'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146', +',,,,,,,,60,65,,2,,8,7,18,,21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17', +'22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69', +',,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1', +'18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55', +'58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54', +',2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,', +',49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44', +'47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,', +'27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29', +'34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9', +'11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21', +'24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61', +'63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,', +',,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40', +'42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,', +',,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22', +',,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,', +',,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18', +',14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58', +'67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2', +',8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49', +'52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47', +'50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27', +'32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34', +'39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11', +',19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24', +'25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63', +',3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,', +'7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30,35,40,42', +',,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,,,,,,,,,', +',,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14,17,22,,,30', +'35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16', +',,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8,1,18,,14', +'17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52,55,58,67', +'69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50,54,,2,,8', +'1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32,,,,,49,52', +'55,58,67,69,,,,,16,,,,,,,,,,,,,,,,,,,,7,,,21,24,25,29,34,39,44,47,50', +'54,,2,,8,1,18,,14,17,22,,,30,35,40,42,,,,,61,63,,3,,9,11,,19,,27,32', +'117,,125,,49,52,55,58,67,69,,,,,16,,,,,,,,,,,,,,140,144,,,,118,,,,133', +',,,,,,,,,130,2,,8,,18,113,116,121,124,128,132,136,139,143,147,150,112', +'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134', +'137,179,145,148,110,117,,125,,,,,263,,,,,,,,,,,,,,,,,,,,,140,144,,,', +'118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147', +'150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122,126', +'129,134,137,141,145,148,110,,,,,,,,310,21,24,25,29,34,39,44,47,50,54', +',,,,1,,,14,17,22,,,30,35,40,42,,,,,,63,,3,,9,11,,19,,27,32,,,,,49,52', +'55,58,67,69,,,,,16,,,,21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22', +',,30,35,40,,,,,,2,63,8,3,18,9,11,,19,,27,32,117,,125,,49,52,55,58,,', +',,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,2,,8,,18,113,116', +'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138', +'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,,,,,,,,304', +'21,24,25,29,34,39,44,47,50,54,,,,,1,,,14,17,22,,,30,35,40,,,,,,,63,', +'3,,9,11,,19,,27,32,,,,,49,52,55,58,67,69,,,,,16,21,24,25,29,34,39,44', +'47,50,54,,,,,,,,,,,,,,35,40,,,,,,,,,2,,8,,18,19,130,,32,117,,125,113', +'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135', +'138,142,146,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,2,,8,,18,113,116', +'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138', +'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117,130', +'125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123', +'127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113', +'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135', +'138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117', +'130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120', +'123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,', +'113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131', +'135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110', +'117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115', +'120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130,', +',,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127', +'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148', +'110,117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112', +'115,120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130', +',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127', +'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148', +'110,117,130,125,,,,,113,116,121,124,128,132,136,139,143,147,150,112', +'115,120,123,127,131,135,138,142,146,140,144,,,,118,,,,133,,,,,,,,,,130', +',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127', +'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148', +'110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,', +',130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123', +'127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,145', +'148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,', +',,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120', +'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141', +'145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133', +',,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115', +'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137', +'179,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,', +'133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112', +'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134', +'137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118', +',,,133,,,,,,,,252,,130,,,,,,113,116,121,124,128,132,136,139,143,147', +'150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122,126', +'129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140,144', +',,,118,,,,133,,,,,,,,37,,130,,,,,,113,116,121,124,128,132,136,139,143', +'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122', +'126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,,,,140', +'144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139', +'143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119', +'122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,,,,,', +',,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136', +'139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114', +'119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,,,,,', +',,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132', +'136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111', +'114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,,,,,', +',,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128', +'132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149', +'111,114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,,,,,', +',,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113,116,121,124', +'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146', +'149,111,114,119,122,126,129,134,137,141,145,148,110,117,,125,,,,,,,', +',,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,37,,130,,,,,,113,116', +'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138', +'142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,117,,125', +',,,,,,,,,,,,,,,,,,,,,,,,,140,144,,,,118,,,,133,,,,,,,,,,130,,,,,,113', +'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135', +'138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110,140', +'144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143', +'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122', +'126,129,134,137,141,145,148,110,140,144,,,,,,,,133,,,,,,,,,,130,,,,', +',113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131', +'135,138,142,146,149,111,114,119,122,126,129,134,137,141,145,148,110', +'140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139', +'143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119', +'122,126,129,134,137,141,140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116', +'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138', +'142,146,149,111,114,119,122,126,129,134,137,141,140,144,,,,,,,,133,', +',,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115', +'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137', +'141,140,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136', +'139,143,147,150,112,115,120,123,127,131,135,138,142,146,149,111,114', +'119,122,126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116', +'121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138', +'142,146,149,111,114,119,122,126,129,134,137,141,144,,,,,,,,133,,,,,', +',,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120', +'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,141', +'144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143', +'147,150,112,115,120,123,127,131,135,138,142,146,149,111,114,119,122', +'126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130,,,,,,113,116,121,124', +'128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146', +'149,111,114,119,122,126,129,134,137,141,144,,,,,,,,133,,,,,,,,,,130', +',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127', +'131,135,138,142,146,149,111,114,119,122,126,129,134,137,141,133,,,,', +',,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120', +'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,133', +',,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115', +'120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137', +'133,,,,,,,,,,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112', +'115,120,123,127,131,135,138,142,146,149,111,114,119,122,126,129,134', +'137,130,,,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120', +'123,127,131,135,138,142,146,149,111,114,119,122,126,129,134,137,130', +',,,,,113,116,121,124,128,132,136,139,143,147,150,112,115,120,123,127', +'131,135,138,142,146,149,111,114,119,122,126,129,134,137,130,,,,,,113', +'116,121,124,128,132,136,139,143,147,150,112,115,120,123,127,131,135', +'138,142,146,149,111,114,119,122,126,129,134,137,130,,,,,,113,116,121', +'124,128,132,136,139,143,147,150,112,115,120,123,127,131,135,138,142', +'146,149,111,114,119,122,126,129,134,137,130,,,,,,113,116,121,124,128', +'132,136,139,143,147,150,112,115,120,123,127,131,135,138,142,146,149', +'111,114,119,122,126,129,134,137' ] + racc_action_table = arr = Array.new(8867, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -356,348 +338,329 @@ clist = [ end clist = [ -'87,145,87,111,111,111,111,111,111,111,111,111,111,296,193,193,79,111', -'111,111,111,296,248,111,111,111,87,87,193,265,248,87,111,186,111,87', -'111,111,291,111,190,111,111,123,145,87,275,111,111,111,111,87,87,87', -'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87', -'87,87,87,87,87,87,87,87,291,111,111,83,83,83,111,75,111,100,111,87,100', -'100,100,100,100,100,100,100,100,100,277,70,70,70,100,100,100,100,275', -'275,100,100,100,100,76,185,94,152,100,100,35,100,76,100,100,176,100', -'151,100,100,90,90,277,176,100,100,100,100,100,100,277,38,38,277,100', -'38,301,301,208,217,217,76,263,76,208,208,208,208,208,83,94,94,176,83', -'84,84,84,98,98,41,41,41,149,100,100,244,244,244,100,70,100,302,100,70', -'302,302,302,302,302,302,302,302,302,302,41,243,243,243,302,302,302,302', -'42,175,302,302,302,302,259,176,176,175,302,302,245,302,259,302,302,180', -'302,254,302,302,29,29,34,34,302,302,302,302,302,302,272,272,143,161', -'302,21,175,41,84,161,161,259,84,41,197,278,278,41,141,244,197,197,140', -'244,245,245,245,218,184,180,180,180,245,302,302,294,39,180,302,243,302', -'3,302,243,3,3,3,3,3,3,3,3,3,3,91,169,97,14,3,3,3,3,174,160,3,3,3,3,6', -'160,160,80,3,3,173,3,2,3,3,159,3,303,3,3,2,159,159,1,3,3,3,3,3,3,122', -',,,3,169,169,169,,169,,204,174,174,174,,230,204,204,2,,2,230,230,230', -'230,230,230,230,230,230,230,,3,3,,,,3,,3,126,3,,126,126,126,126,126', -'126,126,126,126,126,,,89,,126,126,126,126,89,89,126,126,126,126,78,78', -'78,,126,126,78,126,,126,126,200,126,,126,126,,200,200,,126,126,126,126', -'126,126,219,,,,126,,219,219,219,219,219,219,219,219,219,219,219,219', -'219,219,219,219,219,219,219,219,219,,,165,,,,126,126,165,165,,126,,126', -'125,126,,125,125,125,125,125,125,125,125,125,125,,,166,,125,125,125', -'125,166,166,125,125,125,125,,,,,125,125,,125,,125,125,163,125,,125,125', -',163,163,,125,125,125,125,125,125,215,,,,125,,215,215,215,215,215,215', -'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,,,,,,,125', -'125,,,,125,,125,9,125,,9,9,9,9,9,9,9,9,9,9,,,,,9,9,9,9,,,9,9,9,9,,,', -',9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,223,,,,9,,223,223,223,223,223,223', -'223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,,,,,,,9', -'9,,,,9,,9,10,9,,10,10,10,10,10,10,10,10,10,10,,,,,10,10,10,10,,,10,10', -'10,10,,,,,10,10,,10,,10,10,,10,,10,10,,,,,10,10,10,10,10,10,195,,,,10', -',195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195', -'195,195,195,195,,,,,,,10,10,,,,10,,10,124,10,,124,124,124,124,124,124', -'124,124,124,124,,,,,124,124,124,124,,,124,124,124,124,,,,,124,124,,124', -',124,124,,124,,124,124,,,,,124,124,124,124,124,124,231,,,,124,,231,231', -'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231', -'231,231,,,,,,,124,124,,,,124,,124,13,124,,13,13,13,13,13,13,13,13,13', -'13,,,,,13,13,13,13,,,13,13,13,13,,,,,13,13,,13,,13,13,,13,,13,13,,,', -',13,13,13,13,13,13,229,,,,13,,229,229,229,229,229,229,229,229,229,229', -'229,229,229,229,229,229,229,229,229,229,229,,,,,,,13,13,,,,13,,13,128', -'13,,128,128,128,128,128,128,128,128,128,128,,,,,128,128,128,128,,,128', -'128,128,128,,,,,128,128,,128,,128,128,,128,,128,128,,,,,128,128,128', -'128,128,128,226,,,,128,,226,226,226,226,226,226,226,226,226,226,226', -'226,226,226,226,226,226,226,226,226,226,,,,,,,128,128,,,,128,,128,284', -'128,,284,284,284,284,284,284,284,284,284,284,,,,,284,284,284,284,,,284', -'284,284,284,,,,,284,284,,284,,284,284,,284,,284,284,,,,,284,284,284', -'284,284,284,212,,,,284,,212,212,212,212,212,212,212,212,212,212,212', -'212,212,212,212,212,212,212,212,212,212,,284,,,,,284,284,,,,284,,284', -'22,284,,22,22,22,22,22,22,22,22,22,22,,,,,22,22,22,22,,,22,22,22,22', -',,,,22,22,,22,,22,22,,22,,22,22,,,,,22,22,22,22,22,22,196,,,,22,,196', -'196,196,196,196,196,196,196,196,196,196,196,196,224,,,,,,224,224,224', -'224,224,224,224,,22,22,,,,22,,22,282,22,,282,282,282,282,282,282,282', -'282,282,282,,,,,282,282,282,282,,,282,282,282,282,,,,,282,282,,282,', -'282,282,,282,,282,282,,,,,282,282,282,282,282,282,207,,,,282,,207,207', -'207,207,207,207,207,207,207,207,207,207,207,220,,,,,,220,220,220,220', -'220,220,220,,282,282,,,,282,,282,30,282,,30,30,30,30,30,30,30,30,30', -'30,,,,,30,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,30', -',,30,30,30,30,30,30,203,,,,30,,203,203,203,203,203,203,203,203,203,203', -'203,203,203,216,,,,,,216,216,216,216,216,216,216,,30,30,,,,30,,30,281', -'30,,281,281,281,281,281,281,281,281,281,281,,,,,281,281,281,281,,,281', -'281,281,281,,,,,281,281,,281,,281,281,,281,,281,281,,,,,281,281,281', -'281,281,281,199,,,,281,,199,199,199,199,199,199,199,199,199,199,199', -'199,199,213,,,,,,213,213,213,213,213,,,,281,281,,,,281,,281,276,281', -',276,276,276,276,276,276,276,276,276,276,,,,,276,276,276,276,,,276,276', -'276,276,,,,,276,276,,276,,276,276,,276,,276,276,,,,,276,276,276,276', -'276,276,232,,,,276,,232,232,232,232,232,232,232,232,232,232,227,,,,', -',227,227,227,227,227,227,227,227,227,227,,276,276,,,,276,,276,271,276', -',271,271,271,271,271,271,271,271,271,271,,,,,271,271,271,271,,,271,271', -'271,271,,,,,271,271,,271,,271,271,,271,,271,271,,,,,271,271,271,271', -'271,271,,,,,271,,,,,,,,,,,,,,,,,,,,,,,,,,,,,271,271,,,,271,,271,270', -'271,,270,270,270,270,270,270,270,270,270,270,,,,,270,270,270,270,,,270', -'270,270,270,,,,,270,270,,270,,270,270,,270,,270,270,,,,,270,270,270', -'270,270,270,,,,,270,,,,,,,,,,,,,,,,,,,,,,,,,,,,,270,270,,,,270,,270', -'251,270,,251,251,251,251,251,251,251,251,251,251,,,,,251,251,251,251', -',,251,251,251,251,,,,,251,251,,251,,251,251,,251,,251,251,251,,,,251', -'251,251,251,251,251,,,,,251,,,,,,,,,,,,,,,,,,,,,,,,,,,,,251,251,251', -'251,,251,,251,250,251,,250,250,250,250,250,250,250,250,250,250,,,,,250', -'250,250,250,,,250,250,250,250,,,,,250,250,,250,,250,250,,250,,250,250', -',,,,250,250,250,250,250,250,,,,,250,,,,,,,,,,,,,,,,,,,,,,,,,,,,,250', -'250,,,,250,,250,129,250,,129,129,129,129,129,129,129,129,129,129,,,', -',129,129,129,129,,,129,129,129,129,,,,,129,129,,129,,129,129,,129,,129', -'129,,,,,129,129,129,129,129,129,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -'129,129,,,,129,,129,44,129,,44,44,44,44,44,44,44,44,44,44,,,,,44,44', -'44,44,,,44,44,44,44,,,,,44,44,,44,,44,44,,44,,44,44,,,,,44,44,44,44', -'44,44,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,44,,,,44,,44,48,44,,48,48', -'48,48,48,48,48,48,48,48,,,,,48,48,48,48,,,48,48,48,48,,,,,48,48,,48', -',48,48,,48,,48,48,,,,,48,48,48,48,48,48,,,,,48,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,48,48,,,,48,,48,53,48,,53,53,53,53,53,53,53,53,53,53,,,,,53,53', -'53,53,,,53,53,53,53,,,,,53,53,,53,,53,53,,53,,53,53,,,,,53,53,53,53', -'53,53,,,,,53,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53,53,,,,53,,53,57,53,,57,57', -'57,57,57,57,57,57,57,57,,,,,57,57,57,57,,,57,57,57,57,,,,,57,57,,57', -',57,57,,57,,57,57,,,,,57,57,57,57,57,57,,,,,57,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,57,57,,,,57,,57,59,57,,59,59,59,59,59,59,59,59,59,59,,,,,59,59', -'59,59,,,59,59,59,59,,,,,59,59,,59,,59,59,,59,,59,59,,,,,59,59,59,59', -'59,59,,,,,59,,,,,,,,,,,,,,,,,,,,,,,,,,,,,59,59,,,,59,,59,63,59,,63,63', -'63,63,63,63,63,63,63,63,,,,,63,63,63,63,,,63,63,63,63,,,,,63,63,,63', -',63,63,,63,,63,63,,,,,63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,63,63,,,,63,,63,64,63,,64,64,64,64,64,64,64,64,64,64,,,,,64,64', -'64,64,,,64,64,64,64,,,,,64,64,,64,,64,64,,64,,64,64,,,,,64,64,64,64', -'64,64,,,,,64,,,,,,,,,,,,,,,,,,,,,,,,,,,,,64,64,,,,64,,64,68,64,,68,68', -'68,68,68,68,68,68,68,68,,,,,68,68,68,68,,,68,68,68,68,,,,,68,68,,68', -',68,68,,68,,68,68,,,,,68,68,68,68,68,68,,,,,68,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,68,68,,,,68,,68,192,68,,192,192,192,192,192,192,192,192,192,192', -',,,,192,192,192,192,,,192,192,192,192,,,,,192,192,,192,,192,192,,192', -',192,192,,,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,192,192,,,,192,,192,71,192,,71,71,71,71,71,71,71,71,71,71,,,,,71', -'71,71,71,,,71,71,71,71,,,,,71,71,,71,,71,71,,71,,71,71,71,,,,71,71,71', -'71,71,71,,,,,71,,,,,,,,,,,,,,,,,,,,,,,,,,,,,71,71,,,,71,,71,72,71,,72', -'72,72,72,72,72,72,72,72,72,,,,,72,72,72,72,,,72,72,72,72,,,,,72,72,', -'72,,72,72,,72,,72,72,,,,,72,72,72,72,72,72,,,,,72,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,72,72,,,,72,,72,191,72,,191,191,191,191,191,191,191,191,191', -'191,,,,,191,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191', -',191,,191,191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,191,191,,,,191,,191,179,191,,179,179,179,179,179,179,179,179', -'179,179,,,,,179,179,179,179,,,179,179,179,179,,,,,179,179,,179,,179', -'179,,179,,179,179,,,,,179,179,179,179,179,179,,,,,179,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,179,179,,,,179,,179,178,179,,178,178,178,178,178,178,178', -'178,178,178,,,,,178,178,178,178,,,178,178,178,178,,,,,178,178,,178,', -'178,178,,178,,178,178,,,,,178,178,178,178,178,178,,,,,178,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,178,178,,,,178,,178,121,178,,121,121,121,121,121,121', -'121,121,121,121,,,,,121,121,121,121,,,121,121,121,121,,,,,121,121,,121', -',121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,,,121,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,121,121,,,,121,,121,170,121,,170,170,170,170,170', -'170,170,170,170,170,,,,,170,170,170,170,,,170,170,170,170,,,,,170,170', -',170,,170,170,,170,,170,170,,,,,170,170,170,170,170,170,,,,,170,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,170,170,,,,170,,170,157,170,,157,157,157,157', -'157,157,157,157,157,157,,,,,157,157,157,157,,,157,157,157,157,,,,,157', -'157,,157,,157,157,,157,,157,157,,,,,157,157,157,157,157,157,,,,,157', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,157,157,,,,157,,157,155,157,,155,155,155', -'155,155,155,155,155,155,155,,,,,155,155,155,155,,,155,155,155,155,,', -',,155,155,,155,,155,155,,155,,155,155,155,,,,155,155,155,155,155,155', -',,,,155,,,,,,,,,,,,,,,,,,,,,,,,,,,,,155,155,,,,155,,155,120,155,,120', -'120,120,120,120,120,120,120,120,120,,,,,120,120,120,120,,,120,120,120', -'120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120,120,120', -'120,,,,,120,,,,,,,,,,,,,,,,,,,,,,,,,,,,,120,120,,,,120,,120,85,120,', -'85,85,85,85,85,85,85,85,85,85,,,,,85,85,85,85,,,85,85,85,85,,,,,85,85', -',85,,85,85,,85,,85,85,85,,,,85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,85,85,,,,85,,85,150,85,,150,150,150,150,150,150,150,150', -'150,150,,,,,150,150,150,150,,,150,150,150,150,,,,,150,150,,150,,150', -'150,,150,,150,150,,,,,150,150,150,150,150,150,,,,,150,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,150,150,,,,150,,150,0,150,,0,0,0,0,0,0,0,0,0,0,,,,,0,0', -'0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0,0,0,,,,,0,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,0,0,0,0,,0,,0,138,0,,138,138,138,138,138,138,138', -'138,138,138,,,,,138,138,138,138,,,138,138,138,138,,,,,138,138,,138,', -'138,138,,138,,138,138,,,,,138,138,138,138,138,138,,,,,138,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,138,138,,,,138,,138,137,138,,137,137,137,137,137,137', -'137,137,137,137,,,,,137,137,137,137,,,137,137,137,137,,,,,137,137,,137', -',137,137,,137,,137,137,,,,,137,137,137,137,137,137,,,,,137,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,137,137,,,,137,,137,135,137,,135,135,135,135,135', -'135,135,135,135,135,,,,,135,135,135,135,,,135,135,135,135,,,,,135,135', -',135,,135,135,,135,,135,135,,,,,135,135,135,135,135,135,,,,,135,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,135,135,,,,135,,135,134,135,,134,134,134,134', -'134,134,134,134,134,134,,,,,134,134,134,134,,,134,134,134,134,,,,,134', -'134,,134,,134,134,,134,,134,134,,,,,134,134,134,134,134,134,,,,,134', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,134,134,,,,134,,134,133,134,,133,133,133', -'133,133,133,133,133,133,133,,,,,133,133,133,133,,,133,133,133,133,,', -',,133,133,,133,,133,133,,133,,133,133,,,,,133,133,133,133,133,133,,', -',,133,,,,,,,,,,,,,,,,,,,,,,,,,,,,,133,133,,,,133,,133,93,133,,93,93', -'93,93,93,93,93,93,93,93,,,,,93,93,93,93,,,93,93,93,93,,,,,93,93,,93', -',93,93,,93,,93,93,,,,,93,93,93,93,93,93,,,,,93,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,93,93,,,,93,,93,132,93,,132,132,132,132,132,132,132,132,132,132', -',,,,132,132,132,132,,,132,132,132,132,,,,,132,132,,132,,132,132,,132', -',132,132,,,,,132,132,132,132,132,132,,,,,132,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,132,132,,,,132,,132,131,132,,131,131,131,131,131,131,131,131,131', -'131,,,,,131,131,131,131,,,131,131,131,131,,,,,131,131,,131,,131,131', -',131,,131,131,,,,,131,131,131,131,131,131,,,,,131,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,131,131,,,,131,,131,130,131,,130,130,130,130,130,130,130,130', -'130,130,,,,,130,130,130,130,,,130,130,130,130,,,,,130,130,,130,,130', -'130,,130,,130,130,,,,,130,130,130,130,130,130,,,,,130,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,130,130,,,,130,,130,99,130,,99,99,99,99,99,99,99,99,99', -'99,,,,,99,99,99,99,,,99,99,99,99,,,,,99,99,,99,,99,99,,99,,99,99,,,', -',99,99,99,99,99,99,,,,,99,,,,,,,,,,,,,,,,,,,,,,,,,,,,,99,99,,,,99,,99', -'127,99,,127,127,127,127,127,127,127,127,127,127,,,,,127,127,127,127', -',,127,127,127,127,,,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127', -'127,127,127,127,,,,,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,127,127,,,,127,', -'127,101,127,,101,101,101,101,101,101,101,101,101,101,,,,,101,101,101', -'101,,,101,101,101,101,,,,,101,101,,101,,101,101,,101,,101,101,,,,,101', -'101,101,101,101,101,,,,,101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,101,101,,,,101', -',101,102,101,,102,102,102,102,102,102,102,102,102,102,,,,,102,102,102', -'102,,,102,102,102,102,,,,,102,102,,102,,102,102,,102,,102,102,,,,,102', -'102,102,102,102,102,,,,,102,,,,,,,,,,,,,,,,,,,,,,,,,,,,,102,102,,,,102', -',102,103,102,,103,103,103,103,103,103,103,103,103,103,,,,,103,103,103', -'103,,,103,103,103,103,,,,,103,103,,103,,103,103,,103,,103,103,,,,,103', -'103,103,103,103,103,,,,,103,,,,,,,,,,,,,,,,,,,,,,,,,,,,,103,103,,,,103', -',103,104,103,,104,104,104,104,104,104,104,104,104,104,,,,,104,104,104', -'104,,,104,104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104', -'104,104,104,104,104,,,,,104,,,,,,,,,,,,,,,,,,,,,,,,,,,,,104,104,,,,104', -',104,105,104,,105,105,105,105,105,105,105,105,105,105,,,,,105,105,105', -'105,,,105,105,105,105,,,,,105,105,,105,,105,105,,105,,105,105,,,,,105', -'105,105,105,105,105,,,,,105,,,,,,,,,,,,,,,,,,,,,,,,,,,,,105,105,,,,105', -',105,106,105,,106,106,106,106,106,106,106,106,106,106,,,,,106,106,106', -'106,,,106,106,106,106,,,,,106,106,,106,,106,106,,106,,106,106,,,,,106', -'106,106,106,106,106,,,,,106,,,,,,,,,,,,,,,,,,,,,,,,,,,,,106,106,,,,106', -',106,118,106,,118,118,118,118,118,118,118,118,118,118,,,,,118,118,118', -'118,,,118,118,118,118,,,,,118,118,,118,,118,118,,118,,118,118,,,,,118', -'118,118,118,118,118,,,,,118,,,,,,,,,,,,,,,,,,,,,,,,,,,,,118,118,,,,118', -',118,108,118,,108,108,108,108,108,108,108,108,108,108,,,,,108,108,108', -'108,,,108,108,108,108,,,,,108,108,,108,,108,108,,108,,108,108,,,,,108', -'108,108,108,108,108,,,,,108,,,,,,,,,,,,,,,,,,,,,,,,,,,,,108,108,,,,108', -',108,109,108,,109,109,109,109,109,109,109,109,109,109,,,,,109,109,109', -'109,,,109,109,109,109,,,,,109,109,,109,,109,109,,109,,109,109,,,,,109', -'109,109,109,109,109,,,,,109,,,,,,,,,,,,,,,,,,,,,,,,,,,,,109,109,,,,109', -',109,110,109,,110,110,110,110,110,110,110,110,110,110,,,,,110,110,110', -'110,,,110,110,110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110', -'110,110,110,110,110,,,,,110,,,,,,,,,,,,,,,,,,,,,,,,,,,,,110,110,,,,110', -',110,119,110,,119,119,119,119,119,119,119,119,119,119,,,,,119,119,119', -'119,,,119,119,119,119,,,,,119,119,,119,,119,119,,119,,119,119,,,,,119', -'119,119,119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,,,,,,,,,,119,119,,,,119', -',119,112,119,,112,112,112,112,112,112,112,112,112,112,,,,,112,112,112', -'112,,,112,112,112,112,,,,,112,112,,112,,112,112,,112,,112,112,,,,,112', -'112,112,112,112,112,,,,,112,,,,,,,,,,,,,,,,,,,,,,,,,,,,,112,112,,,,112', -',112,113,112,,113,113,113,113,113,113,113,113,113,113,,,,,113,113,113', -'113,,,113,113,113,113,,,,,113,113,,113,,113,113,,113,,113,113,,,,,113', -'113,113,113,113,113,,,,,113,,,,,,,,,,,,,,,,,,,,,,,,,,,,,113,113,,,,113', -',113,114,113,,114,114,114,114,114,114,114,114,114,114,,,,,114,114,114', -'114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114,,,,,114', -'114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,,,,,,,,,,114,114,,,,114', -',114,115,114,,115,115,115,115,115,115,115,115,115,115,,,,,115,115,115', -'115,,,115,115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115', -'115,115,115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,,,,,,,,,,115,115,,,,115', -',115,116,115,,116,116,116,116,116,116,116,116,116,116,,,,,116,116,116', -'116,,,116,116,116,116,,,,,116,116,,116,,116,116,,116,,116,116,,,,,116', -'116,116,116,116,116,,,,,116,,,,,,,,,,,,,,,,,,,,,,,,,,,,,116,116,,,,116', -',116,117,116,,117,117,117,117,117,117,117,117,117,117,,,,,117,117,117', -'117,,,117,117,117,117,,,,,117,117,,117,,117,117,,117,,117,117,,,,,117', -'117,117,117,117,117,,,,,117,,,,,,,,,,,,,,,,,,,,,,,,,,,,,117,117,,,,117', -',117,107,117,,107,107,107,107,107,107,107,107,107,107,,,,,107,107,107', -'107,,,107,107,107,107,,,,,107,107,,107,,107,107,,107,,107,107,,,,,107', -'107,107,107,107,107,,,,,107,153,153,153,153,153,153,153,153,153,153', -',,,,,,,,,,,153,153,,,,,,107,107,,,,107,,107,153,107,,153,,,305,,305', -'5,5,5,5,5,5,5,5,5,5,,,,,,,,,,,,5,5,305,305,,,,305,,,,305,,,,5,,,5,,', -'305,153,,153,,153,305,305,305,305,305,305,305,305,305,305,305,305,305', +'100,302,100,159,159,159,159,159,159,159,159,159,159,162,109,109,252', +'301,42,162,162,70,204,204,252,301,159,159,100,100,96,96,96,100,169,169', +'204,100,255,163,254,159,262,161,159,163,163,100,302,161,161,36,36,100', +'100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100', +'100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,249', +'249,249,250,250,250,159,70,159,177,159,100,177,177,177,177,177,177,177', +'177,177,177,106,96,152,168,177,96,75,177,177,177,189,180,177,177,177', +'177,280,280,189,170,177,177,81,177,271,177,177,214,177,273,177,177,177', +'214,214,83,177,177,177,177,177,177,73,73,106,106,177,152,153,189,75', +'75,75,221,75,180,180,180,249,221,221,250,249,180,173,250,97,97,97,5', +'5,5,26,282,46,46,46,177,177,179,177,84,177,2,177,187,2,2,2,2,2,2,2,2', +'2,2,189,189,72,193,2,46,22,2,2,2,98,282,2,2,2,2,98,98,234,282,2,2,282', +'2,92,2,2,11,2,93,2,2,2,187,187,187,2,2,2,2,2,2,1,1,233,233,2,193,193', +'193,97,141,46,5,97,193,8,5,46,41,41,217,46,140,8,299,3,217,217,3,3,3', +'3,3,3,3,3,3,3,195,2,196,2,3,2,197,3,3,3,102,89,3,3,3,3,8,306,8,89,3', +'3,201,3,267,3,3,167,3,45,3,3,267,167,167,108,3,3,3,3,3,3,160,308,308', +',3,225,160,160,89,188,89,225,225,225,225,225,166,188,101,101,,267,166', +'166,131,283,283,131,131,131,131,131,131,131,131,131,131,,3,,3,131,3', +',131,131,131,,188,131,131,131,131,91,91,91,,131,131,91,131,,131,131', +',131,,131,131,,,,,131,131,131,131,131,131,213,,,,131,,213,213,213,213', +'213,213,213,213,213,213,213,213,213,,,,,,7,,,7,7,7,7,7,7,7,7,7,7,,131', +',131,7,131,,7,7,7,,,7,7,7,7,,,,,7,7,,7,,7,7,,7,,7,7,,,,,7,7,7,7,7,7', +'224,,,,7,,224,224,224,224,224,224,224,224,224,224,224,224,224,,,,,,129', +',,129,129,129,129,129,129,129,129,129,129,,7,,7,129,7,,129,129,129,', +',129,129,129,129,,,,,129,129,,129,,129,129,,129,,129,129,,,,,129,129', +'129,129,129,129,220,,,,129,,220,220,220,220,220,220,220,220,220,220', +'220,220,220,,,,,,9,,,9,9,9,9,9,9,9,9,9,9,,129,,129,9,129,,9,9,9,,,9', +'9,9,9,,,,,9,9,,9,,9,9,,9,,9,9,,,,,9,9,9,9,9,9,216,,,,9,,216,216,216', +'216,216,216,216,216,216,216,216,216,216,,,,,,128,,,128,128,128,128,128', +'128,128,128,128,128,,9,,9,128,9,,128,128,128,,,128,128,128,128,,,,,128', +'128,,128,,128,128,,128,,128,128,,,,,128,128,128,128,128,128,209,,,,128', +',209,209,209,209,209,209,209,209,209,209,,,,,,,,,127,,,127,127,127,127', +'127,127,127,127,127,127,,128,,128,127,128,,127,127,127,,,127,127,127', +'127,,,,,127,127,,127,,127,127,,127,,127,127,,,,,127,127,127,127,127', +'127,207,,,,127,,207,207,207,207,207,207,207,207,207,207,,,,,,,,,16,', +',16,16,16,16,16,16,16,16,16,16,,127,,127,16,127,,16,16,16,,,16,16,16', +'16,,,,,16,16,,16,,16,16,,16,,16,16,,,,,16,16,16,16,16,16,243,,,,16,', +'243,243,243,243,243,243,243,243,243,243,,,,,,,,,126,,,126,126,126,126', +'126,126,126,126,126,126,,16,,16,126,16,,126,126,126,,,126,126,126,126', +',,,,126,126,,126,,126,126,,126,,126,126,,,,,126,126,126,126,126,126', +'240,,,,126,,240,240,240,240,240,240,240,229,,,,,,229,229,229,229,229', +'18,,,18,18,18,18,18,18,18,18,18,18,,126,,126,18,126,,18,18,18,,,18,18', +'18,18,,,,,18,18,,18,,18,18,,18,,18,18,,,,,18,18,18,18,18,18,232,,,,18', +',232,232,232,232,232,232,232,,,,,,,,,,,,285,,,285,285,285,285,285,285', +'285,285,285,285,,18,,18,285,18,,285,285,285,,,285,285,285,285,,,,,285', +'285,,285,,285,285,,285,,285,285,,,,,285,285,285,285,285,285,236,,,,285', +',236,236,236,236,236,236,236,,,,,,,,,,,,278,,,278,278,278,278,278,278', +'278,278,278,278,,285,,285,278,285,,278,278,278,,,278,278,278,278,,,', +',278,278,,278,,278,278,,278,,278,278,,,,,278,278,278,278,278,278,,,', +',278,,,,,,,,,,,,,,,,,,,,30,,,30,30,30,30,30,30,30,30,30,30,,278,,278', +'30,278,,30,30,30,,,30,30,30,30,,,,,30,30,,30,,30,30,,30,,30,30,,,,,30', +'30,30,30,30,30,,,,,30,,,,,,,,,,,,,,,,,,,,277,,,277,277,277,277,277,277', +'277,277,277,277,,30,,30,277,30,,277,277,277,,,277,277,277,277,,,,,277', +'277,,277,,277,277,,277,,277,277,,,,,277,277,277,277,277,277,,,,,277', +',,,,,,,,,,,,,,,,,,,37,,,37,37,37,37,37,37,37,37,37,37,,277,,277,37,277', +',37,37,37,,,37,37,37,37,,,,,37,37,,37,,37,37,,37,,37,37,,37,,,37,37', +'37,37,37,37,,,,,37,,,,,,,,,,,,,,,,,,,,261,,,261,261,261,261,261,261', +'261,261,261,261,,37,,37,261,37,,261,261,261,,,261,261,261,261,,,,,261', +'261,,261,,261,261,,261,,261,261,,,,,261,261,261,261,261,261,206,,,,261', +',206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206', +'206,206,206,206,,261,,,,,,,,,,261,,261,259,261,,259,259,259,259,259', +'259,259,259,259,259,,,,,259,,,259,259,259,,,259,259,259,259,,,,,259', +'259,,259,,259,259,,259,,259,259,,,,,259,259,259,259,259,259,,,,,259', +',,,,,,,,,,,,,,,,,,,258,,,258,258,258,258,258,258,258,258,258,258,,259', +',259,258,259,,258,258,258,,,258,258,258,258,,,,,258,258,,258,,258,258', +',258,,258,258,,,,,258,258,258,258,258,258,,,,,258,,,,,,,,,,,,,,,,,,', +',203,,,203,203,203,203,203,203,203,203,203,203,,258,,258,203,258,,203', +'203,203,,,203,203,203,203,,,,,203,203,,203,,203,203,,203,,203,203,,', +',,203,203,203,203,203,203,,,,,203,,,,,,,,,,,,,,,,,,,,202,,,202,202,202', +'202,202,202,202,202,202,202,,203,,203,202,203,,202,202,202,,,202,202', +'202,202,,,,,202,202,,202,,202,202,,202,,202,202,,,,,202,202,202,202', +'202,202,,,,,202,,,,,,,,,,,,,,,,,,,,49,,,49,49,49,49,49,49,49,49,49,49', +',202,,202,49,202,,49,49,49,,,49,49,49,49,,,,,49,49,,49,,49,49,,49,,49', +'49,,,,,49,49,49,49,49,49,,,,,49,,,,,,,,,,,,,,,,,,,,52,,,52,52,52,52', +'52,52,52,52,52,52,,49,,49,52,49,,52,52,52,,,52,52,52,52,,,,,52,52,,52', +',52,52,,52,,52,52,,,,,52,52,52,52,52,52,,,,,52,,,,,,,,,,,,,,,,,,,,55', +',,55,55,55,55,55,55,55,55,55,55,,52,,52,55,52,,55,55,55,,,55,55,55,55', +',,,,55,55,,55,,55,55,,55,,55,55,,,,,55,55,55,55,55,55,,,,,55,,,,,,,', +',,,,,,,,,,,,58,,,58,58,58,58,58,58,58,58,58,58,,55,,55,58,55,,58,58', +'58,,,58,58,58,58,,,,,58,58,,58,,58,58,,58,,58,58,,,,,58,58,58,58,58', +'58,,,,,58,,,,,,,,,,,,,,,,,,,,61,,,61,61,61,61,61,61,61,61,61,61,,58', +',58,61,58,,61,61,61,,,61,61,61,61,,,,,61,61,,61,,61,61,,61,,61,61,,', +',,61,61,61,61,61,61,,,,,61,,,,,,,,,,,,,,,,,,,,63,,,63,63,63,63,63,63', +'63,63,63,63,,61,,61,63,61,,63,63,63,,,63,63,63,63,,,,,63,63,,63,,63', +'63,,63,,63,63,,,,,63,63,63,63,63,63,,,,,63,,,,,,,,,,,,,,,,,,,,67,,,67', +'67,67,67,67,67,67,67,67,67,,63,,63,67,63,,67,67,67,,,67,67,67,67,,,', +',67,67,,67,,67,67,,67,,67,67,,,,,67,67,67,67,67,67,,,,,67,,,,,,,,,,', +',,,,,,,,,69,,,69,69,69,69,69,69,69,69,69,69,,67,,67,69,67,,69,69,69', +',,69,69,69,69,,,,,69,69,,69,,69,69,,69,,69,69,,,,,69,69,69,69,69,69', +',,,,69,,,,,,,,,,,,,,,,,,,,192,,,192,192,192,192,192,192,192,192,192', +'192,,69,,69,192,69,,192,192,192,,,192,192,192,192,,,,,192,192,,192,', +'192,192,,192,,192,192,,,,,192,192,192,192,192,192,,,,,192,,,,,,,,,,', +',,,,,,,,,191,,,191,191,191,191,191,191,191,191,191,191,,192,,192,191', +'192,,191,191,191,,,191,191,191,191,,,,,191,191,,191,,191,191,,191,,191', +'191,,,,,191,191,191,191,191,191,,,,,191,,,,,,,,,,,,,,,,,,,,125,,,125', +'125,125,125,125,125,125,125,125,125,,191,,191,125,191,,125,125,125,', +',125,125,125,125,,,,,125,125,,125,,125,125,,125,,125,125,,,,,125,125', +'125,125,125,125,,,,,125,,,,,,,,,,,,,,,,,,,,74,,,74,74,74,74,74,74,74', +'74,74,74,,125,,125,74,125,,74,74,74,,,74,74,74,74,,,,,74,74,,74,,74', +'74,,74,,74,74,,,,,74,74,74,74,74,74,,,,,74,,,,,,,,,,,,,,,,,,,,124,,', +'124,124,124,124,124,124,124,124,124,124,,74,,74,124,74,,124,124,124', +',,124,124,124,124,,,,,124,124,,124,,124,124,,124,,124,124,,,,,124,124', +'124,124,124,124,,,,,124,,,,,,,,,,,,,,,,,,,,309,,,309,309,309,309,309', +'309,309,309,309,309,,124,,124,309,124,,309,309,309,,,309,309,309,309', +',,,,309,309,,309,,309,309,,309,,309,309,,,,,309,309,309,309,309,309', +',,,,309,,,,,,,,,,,,,,,,,,,,176,,,176,176,176,176,176,176,176,176,176', +'176,,309,,309,176,309,,176,176,176,,,176,176,176,176,,,,,176,176,,176', +',176,176,,176,,176,176,,,,,176,176,176,176,176,176,,,,,176,,,,,,,,,', +',,,,,,,,,,78,,,78,78,78,78,78,78,78,78,78,78,,176,,176,78,176,,78,78', +'78,,,78,78,78,78,,,,,78,78,,78,,78,78,,78,,78,78,78,,,,78,78,78,78,78', +'78,,,,,78,,,,,,,,,,,,,,,,,,,,123,,,123,123,123,123,123,123,123,123,123', +'123,,78,,78,123,78,,123,123,123,,,123,123,123,123,,,,,123,123,,123,', +'123,123,,123,,123,123,,,,,123,123,123,123,123,123,,,,,123,,,,,,,,,,', +',,,,,,,,,157,,,157,157,157,157,157,157,157,157,157,157,,123,,123,157', +'123,,157,157,157,,,157,157,157,157,,,,,157,157,,157,,157,157,,157,,157', +'157,,,,,157,157,157,157,157,157,,,,,157,,,,,,,,,,,,,,,,,,,,150,,,150', +'150,150,150,150,150,150,150,150,150,,157,,157,150,157,,150,150,150,', +',150,150,150,150,,,,,150,150,,150,,150,150,,150,,150,150,,,,,150,150', +'150,150,150,150,,,,,150,,,,,,,,,,,,,,,,,,,,85,,,85,85,85,85,85,85,85', +'85,85,85,,150,,150,85,150,,85,85,85,,,85,85,85,85,,,,,85,85,,85,,85', +'85,,85,,85,85,,,,,85,85,85,85,85,85,,,,,85,,,,,,,,,,,,,,,,,,,,149,,', +'149,149,149,149,149,149,149,149,149,149,,85,,85,149,85,,149,149,149', +',,149,149,149,149,,,,,149,149,,149,,149,149,,149,,149,149,,,,,149,149', +'149,149,149,149,,,,,149,,,,,,,,,,,,,,,,,,,,148,,,148,148,148,148,148', +'148,148,148,148,148,,149,,149,148,149,,148,148,148,,,148,148,148,148', +',,,,148,148,,148,,148,148,,148,,148,148,,,,,148,148,148,148,148,148', +',,,,148,,,,,,,,,,,,,,,,,,,,147,,,147,147,147,147,147,147,147,147,147', +'147,,148,,148,147,148,,147,147,147,,,147,147,147,147,,,,,147,147,,147', +',147,147,,147,,147,147,,,,,147,147,147,147,147,147,,,,,147,,,,,,,,,', +',,,,,,,,,,146,,,146,146,146,146,146,146,146,146,146,146,,147,,147,146', +'147,,146,146,146,,,146,146,146,146,,,,,146,146,,146,,146,146,,146,,146', +'146,,,,,146,146,146,146,146,146,,,,,146,,,,,,,,,,,,,,,,,,,,145,,,145', +'145,145,145,145,145,145,145,145,145,,146,,146,145,146,,145,145,145,', +',145,145,145,145,,,,,145,145,,145,,145,145,,145,,145,145,,,,,145,145', +'145,145,145,145,,,,,145,,,,,,,,,,,,,,,,,,,,144,,,144,144,144,144,144', +'144,144,144,144,144,,145,,145,144,145,,144,144,144,,,144,144,144,144', +',,,,144,144,,144,,144,144,,144,,144,144,,,,,144,144,144,144,144,144', +',,,,144,,,,,,,,,,,,,,,,,,,,95,,,95,95,95,95,95,95,95,95,95,95,,144,', +'144,95,144,,95,95,95,,,95,95,95,95,,,,,95,95,,95,,95,95,,95,,95,95,95', +',,,95,95,95,95,95,95,,,,,95,,,,,,,,,,,,,,,,,,,,143,,,143,143,143,143', +'143,143,143,143,143,143,,95,,95,143,95,,143,143,143,,,143,143,143,143', +',,,,143,143,,143,,143,143,,143,,143,143,,,,,143,143,143,143,143,143', +',,,,143,,,,,,,,,,,,,,,,,,,,142,,,142,142,142,142,142,142,142,142,142', +'142,,143,,143,142,143,,142,142,142,,,142,142,142,142,,,,,142,142,,142', +',142,142,,142,,142,142,,,,,142,142,142,142,142,142,,,,,142,,,,,,,,,', +',,,,,,,,,,139,,,139,139,139,139,139,139,139,139,139,139,,142,,142,139', +'142,,139,139,139,,,139,139,139,139,,,,,139,139,,139,,139,139,,139,,139', +'139,,,,,139,139,139,139,139,139,,,,,139,,,,,,,,,,,,,,,,,,,,138,,,138', +'138,138,138,138,138,138,138,138,138,,139,,139,138,139,,138,138,138,', +',138,138,138,138,,,,,138,138,,138,,138,138,,138,,138,138,,,,,138,138', +'138,138,138,138,,,,,138,,,,,,,,,,,,,,,,,,,,0,,,0,0,0,0,0,0,0,0,0,0,', +'138,,138,0,138,,0,0,0,,,0,0,0,0,,,,,0,0,,0,,0,0,,0,,0,0,0,,,,0,0,0,0', +'0,0,235,,,,0,,235,235,235,235,235,235,235,235,235,235,235,235,235,235', +'235,235,235,235,235,235,235,,,,,,,,,0,0,,0,,0,137,0,,137,137,137,137', +'137,137,137,137,137,137,,,,,137,,,137,137,137,,,137,137,137,137,,,,', +'137,137,,137,,137,137,,137,,137,137,,,,,137,137,137,137,137,137,,,,', +'137,,,,,,,,,,,,,,,,,,,,136,,,136,136,136,136,136,136,136,136,136,136', +',137,,137,136,137,,136,136,136,,,136,136,136,136,,,,,136,136,,136,,136', +'136,,136,,136,136,,,,,136,136,136,136,136,136,,,,,136,,,,,,,,,,,,,,', +',,,,,135,,,135,135,135,135,135,135,135,135,135,135,,136,,136,135,136', +',135,135,135,,,135,135,135,135,,,,,135,135,,135,,135,135,,135,,135,135', +',,,,135,135,135,135,135,135,,,,,135,,,,,,,,,,,,,,,,,,,,104,,,104,104', +'104,104,104,104,104,104,104,104,,135,,135,104,135,,104,104,104,,,104', +'104,104,104,,,,,104,104,,104,,104,104,,104,,104,104,,,,,104,104,104', +'104,104,104,,,,,104,,,,,,,,,,,,,,,,,,,,134,,,134,134,134,134,134,134', +'134,134,134,134,,104,,104,134,104,,134,134,134,,,134,134,134,134,,,', +',134,134,,134,,134,134,,134,,134,134,,,,,134,134,134,134,134,134,,,', +',134,,,,,,,,,,,,,,,,,,,,133,,,133,133,133,133,133,133,133,133,133,133', +',134,,134,133,134,,133,133,133,,,133,133,133,133,,,,,133,133,,133,,133', +'133,,133,,133,133,,,,,133,133,133,133,133,133,,,,,133,,,,,,,,,,,,,,', +',,,,,122,,,122,122,122,122,122,122,122,122,122,122,,133,,133,122,133', +',122,122,122,,,122,122,122,122,,,,,122,122,,122,,122,122,,122,,122,122', +',,,,122,122,122,122,122,122,,,,,122,,,,,,,,,,,,,,,,,,,,110,,,110,110', +'110,110,110,110,110,110,110,110,,122,,122,110,122,,110,110,110,,,110', +'110,110,110,,,,,110,110,,110,,110,110,,110,,110,110,,,,,110,110,110', +'110,110,110,,,,,110,,,,,,,,,,,,,,,,,,,,111,,,111,111,111,111,111,111', +'111,111,111,111,,110,,110,111,110,,111,111,111,,,111,111,111,111,,,', +',111,111,,111,,111,111,,111,,111,111,,,,,111,111,111,111,111,111,,,', +',111,,,,,,,,,,,,,,,,,,,,112,,,112,112,112,112,112,112,112,112,112,112', +',111,,111,112,111,,112,112,112,,,112,112,112,112,,,,,112,112,,112,,112', +'112,,112,,112,112,,,,,112,112,112,112,112,112,,,,,112,,,,,,,,,,,,,,', +',,,,,114,,,114,114,114,114,114,114,114,114,114,114,,112,,112,114,112', +',114,114,114,,,114,114,114,114,,,,,114,114,,114,,114,114,,114,,114,114', +',,,,114,114,114,114,114,114,,,,,114,,,,,,,,,,,,,,,,,,,,115,,,115,115', +'115,115,115,115,115,115,115,115,,114,,114,115,114,,115,115,115,,,115', +'115,115,115,,,,,115,115,,115,,115,115,,115,,115,115,,,,,115,115,115', +'115,115,115,,,,,115,,,,,,,,,,,,,,,,,,,,117,,,117,117,117,117,117,117', +'117,117,117,117,,115,,115,117,115,,117,117,117,,,117,117,117,117,,,', +',117,117,,117,,117,117,,117,,117,117,,,,,117,117,117,117,117,117,,,', +',117,,,,,,,,,,,,,,,,,,,,118,,,118,118,118,118,118,118,118,118,118,118', +',117,,117,118,117,,118,118,118,,,118,118,118,118,,,,,118,118,,118,,118', +'118,,118,,118,118,,,,,118,118,118,118,118,118,,,,,118,,,,,,,,,,,,,,', +',,,,,119,,,119,119,119,119,119,119,119,119,119,119,,118,,118,119,118', +',119,119,119,,,119,119,119,119,,,,,119,119,,119,,119,119,,119,,119,119', +',,,,119,119,119,119,119,119,,,,,119,,,,,,,,,,,,,,,,,,,,120,,,120,120', +'120,120,120,120,120,120,120,120,,119,,119,120,119,,120,120,120,,,120', +'120,120,120,,,,,120,120,,120,,120,120,,120,,120,120,,,,,120,120,120', +'120,120,120,,,,,120,,,,,,,,,,,,,,,,,,,,121,,,121,121,121,121,121,121', +'121,121,121,121,,120,,120,121,120,,121,121,121,,,121,121,121,121,,,', +',121,121,,121,,121,121,,121,,121,121,,,,,121,121,121,121,121,121,,,', +',121,,,,,,,,,,,,,,,,,,,,132,,,132,132,132,132,132,132,132,132,132,132', +',121,,121,132,121,,132,132,132,,,132,132,132,132,,,,,132,132,,132,,132', +'132,,132,,132,132,185,,185,,132,132,132,132,132,132,,,,,132,,,,,,,,', +',,,,,185,185,,,,185,,,,185,,,,,,,,,,185,132,,132,,132,185,185,185,185', +'185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185', +'185,185,185,185,185,185,185,185,185,185,185,185,185,305,,305,,,,,185', +',,,,,,,,,,,,,,,,,,,,305,305,,,,305,,,,305,,,,,,,,,,305,,,,,,305,305', '305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305', -'305,305,305,305,240,,240,,,,5,305,5,,5,,,,,,,,,,,,,,,,240,240,,,,240', -',,,240,,,,,,,,,,240,,,,,,240,240,240,240,240,240,240,240,240,240,240', -'240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240', -'240,240,240,240,240,240,,,,,,,,240,11,11,11,11,11,11,11,11,11,11,,,', -',11,11,11,11,,,11,11,11,11,,,,,,11,,11,,11,11,,11,,11,11,,,,,11,11,11', -'11,11,11,300,,300,,11,,,,,,,,,,,,,,,,,,,,,,300,300,,,,300,,11,11,300', -',,11,,11,,11,,,300,,,,,,300,300,300,300,300,300,300,300,300,300,300', -'300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300', -'300,300,300,300,300,300,,,,,,,,300,299,299,299,299,299,299,299,299,299', -'299,,,,,299,299,299,299,,,299,299,299,,,,,,,299,,299,,299,299,,299,', -'299,299,,,,,299,299,299,299,299,299,162,,162,,299,,,,,,,,,,,,,,,,,,', -',,,162,162,,,,162,,299,299,162,,,299,,299,,299,162,,162,,,,,,162,162', -'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162', -'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,308,,308', -',,,,,,,,,,,,,,,,,,,,,,,308,308,,,,308,,,,308,,,,,,,,,,308,,,,,,308,308', -'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308', -'308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,201,,201', -',,,,,,,,,,,,,,,,,,,,,,,201,201,,,,201,,,,201,,,,,,,,,,201,,,,,,201,201', -'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201', -'201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,298,,298', -',,,,,,,,,,,,,,,,,,,,,,,298,298,,,,298,,,,298,,,,,,,,,,298,,,,,,298,298', -'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298', -'298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,194,,194', -',,,,,,,,,,,,,,,,,,,,,,,194,194,,,,194,,,,194,,,,,,,,,,194,,,,,,194,194', -'194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194', -'194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,188,,188', -',,,,,,,,,,,,,,,,,,,,,,,188,188,,,,188,,,,188,,,,,,,,,,188,,,,,,188,188', -'188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188', -'188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,297,,297', -',,,,,,,,,,,,,,,,,,,,,,,297,297,,,,297,,,,297,,,,,,,,,,297,,,,,,297,297', -'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', -'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,292,,292', -',,,,,,,,,,,,,,,,,,,,,,,292,292,,,,292,,,,292,,,,,,,,,,292,,,,,,292,292', -'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292', -'292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,181,,181', -',,,,,,,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181', -'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181', -'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,37,,37,', -',,,,,,,,,,,,,,,,,,,,,,37,37,,,,37,,,,37,,,,,,,,,,37,,,,,,37,37,37,37', -'37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37', -'37,37,37,37,37,37,37,171,,171,,,,,,,,,,,,,,,,,,,,,,,,171,171,,,,171', -',,,171,,,,,,,,,,171,,,,,,171,171,171,171,171,171,171,171,171,171,171', -'171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171', -'171,171,171,171,171,171,253,,253,,,,,,,,,,,,,,,,,,,,,,,,253,253,,,,253', -',,,253,,,,,,,,,,253,,,,,,253,253,253,253,253,253,253,253,253,253,253', -'253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253', -'253,253,253,253,253,253,283,,283,,,,,,,,,,,,,,,,,,,,,,,,283,283,,,,283', -',,,283,,,,,,,,,,283,,,,,,283,283,283,283,283,283,283,283,283,283,283', -'283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283', -'283,283,283,283,283,283,164,,164,,,,,,,,,,,,,,,,,,,,,,,,164,164,,,,164', -',,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164,164,164,164,164', -'164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164', -'164,164,164,164,164,164,164,280,,280,,,,,,,,,,,,,,,,,,,,,,,,280,280', -',,,280,,,,280,,,,,,,,,,280,,,,,,280,280,280,280,280,280,280,280,280', -'280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280', -'280,280,280,280,280,280,280,280,86,,86,,,,,,,,,,,,,,,,,,,,,,,,86,86', -',,,86,,,,86,,,,,,,,86,,86,,,,,,86,86,86,86,86,86,86,86,86,86,86,86,86', -'86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,260,', -'260,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260,,,,,,,,,,260,,,,,,260', -'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260', -'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,261', -',261,,,,,,,,,,,,,,,,,,,,,,,,261,261,,,,261,,,,261,,,,,,,,,,261,,,,,', -'261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261', -'261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261', -'209,,209,,,,,,,,,,,,,,,,,,,,,,,,209,209,,,,209,,,,209,,,,,,,,,,209,', -',,,,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', -'209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209', -'209,246,246,,,,,,,,246,,,,,,,,,,246,,,,,,246,246,246,246,246,246,246', -'246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246', -'246,246,246,246,246,246,246,246,246,246,88,88,,,,,,,,88,,,,,,,,,,88', -',,,,,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88', -'88,88,88,88,88,88,88,88,88,88,88,88,88,225,225,,,,,,,,225,,,,,,,,,,225', -',,,,,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225', -'225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,228,228', -',,,,,,,228,,,,,,,,,,228,,,,,,228,228,228,228,228,228,228,228,228,228', -'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', -'228,228,228,228,92,92,,,,,,,,92,,,,,,,,,,92,,,,,,92,92,92,92,92,92,92', -'92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92', -'92,222,222,,,,,,,,222,,,,,,,,,,222,,,,,,222,222,222,222,222,222,222', -'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', -'222,222,222,222,222,222,222,289,,,,,,,,289,,,,,,,,,,289,,,,,,289,289', -'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289', -'289,289,289,289,289,289,289,289,289,289,289,289,268,,,,,,,,268,,,,,', -',,,,268,,,,,,268,268,268,268,268,268,268,268,268,268,268,268,268,268', +'305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,,,,,,,,305', +'17,17,17,17,17,17,17,17,17,17,,,,,17,,,17,17,17,,,17,17,17,17,,,,,,17', +',17,,17,17,,17,,17,17,,,,,17,17,17,17,17,17,,,,,17,,,,130,130,130,130', +'130,130,130,130,130,130,,,,,130,,,130,130,130,,,130,130,130,,,,,,17', +'130,17,130,17,130,130,,130,,130,130,290,,290,,130,130,130,130,,,,,,', +',,,,,,,,,,,,,,290,290,,,,290,,,,290,,,,,,,,,,290,130,,130,,130,290,290', +'290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290', +'290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,,,,,,,,290', +'291,291,291,291,291,291,291,291,291,291,,,,,291,,,291,291,291,,,291', +'291,291,,,,,,,291,,291,,291,291,,291,,291,291,,,,,291,291,291,291,291', +'291,,,,,291,14,14,14,14,14,14,14,14,14,14,,,,,,,,,,,,,,14,14,,,,,,,', +',291,,291,,291,14,208,,14,268,,268,208,208,208,208,208,208,208,208,208', +'208,208,208,208,208,208,208,208,208,208,208,208,,,,,268,268,,,,268,', +',,268,,,,,,,,,,268,14,,14,,14,268,268,268,268,268,268,268,268,268,268', '268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268', -'221,,,,,,,,221,,,,,,,,,,221,,,,,,221,221,221,221,221,221,221,221,221', -'221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221', -'221,221,221,221,221,288,,,,,,,,288,,,,,,,,,,288,,,,,,288,288,288,288', -'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288', -'288,288,288,288,288,288,288,288,288,288,267,,,,,,,,267,,,,,,,,,,267', -',,,,,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267', -'267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,82,,,,,', -',,,,82,,,,,,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82', -'82,82,82,82,82,82,82,82,82,82,82,210,,,,,,,,,,210,,,,,,210,210,210,210', -'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', -'210,210,210,210,210,210,210,210,210,172,,,,,,,,,,172,,,,,,172,172,172', -'172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172', -'172,172,172,172,172,172,172,172,172,172,198,,,,,,198,198,198,198,198', -'198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198', -'198,198,198,198,198,198,198,198,205,,,,,,205,205,205,205,205,205,205', -'205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205', -'205,205,205,205,205,205,211,,,,,,211,211,211,211,211,211,211,211,211', +'268,268,268,268,268,268,268,313,231,313,,,,,231,231,231,231,231,231', +'231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,313,313', +',,,313,,,,313,,,,,,,,,,313,,,,,,313,313,313,313,313,313,313,313,313', +'313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313', +'313,313,313,313,313,313,313,313,211,239,211,,,,,239,239,239,239,239', +'239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,211', +'211,,,,211,,,,211,,,,,,,,,,211,,,,,,211,211,211,211,211,211,211,211', '211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211', -'211,211,211,211,202,,,,,,202,202,202,202,202,202,202,202,202,202,202', -'202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202', -'202,202,214,,,,,,214,214,214,214,214,214,214,214,214,214,214,214,214', -'214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214' ] - racc_action_check = arr = Array.new(9789, nil) +'211,211,211,211,211,211,211,211,211,210,242,210,,,,,242,242,242,242', +'242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242', +'210,210,,,,210,,,,210,,,,,,,,,,210,,,,,,210,210,210,210,210,210,210', +'210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210', +'210,210,210,210,210,210,210,210,210,210,199,212,199,,,,,212,212,212', +'212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212', +'212,199,199,,,,199,,,,199,,,,,,,,,,199,,,,,,199,199,199,199,199,199', +'199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199', +'199,199,199,199,199,199,199,199,199,199,199,303,228,303,,,,,228,228', +'228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228', +'228,228,303,303,,,,303,,,,303,,,,,,,,,,303,,,,,,303,303,303,303,303', +'303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303', +'303,303,303,303,303,303,303,303,303,303,303,303,269,,269,,,,,,,,,,,', +',,,,,,,,,,,,,,269,269,,,,269,,,,269,,,,,,,,,,269,,,,,,269,269,269,269', +'269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269', +'269,269,269,269,269,269,269,269,269,269,269,269,269,181,,181,,,,,,,', +',,,,,,,,,,,,,,,,,,181,181,,,,181,,,,181,,,,,,,,,,181,,,,,,181,181,181', +'181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181', +'181,181,181,181,181,181,181,181,181,181,181,181,181,181,76,,76,,,,,', +',,,,,,,,,,,,,,,,,,,,76,76,,,,76,,,,76,,,,,,,,,,76,,,,,,76,76,76,76,76', +'76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76', +'76,76,76,76,76,76,174,,174,,,,,,,,,,,,,,,,,,,,,,,,,,174,174,,,,174,', +',,174,,,,,,,,,,174,,,,,,174,174,174,174,174,174,174,174,174,174,174', +'174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174', +'174,174,174,174,174,174,165,,165,,,,,,,,,,,,,,,,,,,,,,,,,,165,165,,', +',165,,,,165,,,,,,,,165,,165,,,,,,165,165,165,165,165,165,165,165,165', +'165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165', +'165,165,165,165,165,165,165,165,164,,164,,,,,,,,,,,,,,,,,,,,,,,,,,164', +'164,,,,164,,,,164,,,,,,,,164,,164,,,,,,164,164,164,164,164,164,164,164', +'164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164', +'164,164,164,164,164,164,164,164,164,257,,257,,,,,,,,,,,,,,,,,,,,,,,', +',,257,257,,,,257,,,,257,,,,,,,,,,257,,,,,,257,257,257,257,257,257,257', +'257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257', +'257,257,257,257,257,257,257,257,257,257,43,,43,,,,,,,,,,,,,,,,,,,,,', +',,,,43,43,,,,43,,,,43,,,,,,,,,,43,,,,,,43,43,43,43,43,43,43,43,43,43', +'43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43', +'43,289,,289,,,,,,,,,,,,,,,,,,,,,,,,,,289,289,,,,289,,,,289,,,,,,,,,', +'289,,,,,,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289', +'289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289', +'289,289,288,,288,,,,,,,,,,,,,,,,,,,,,,,,,,288,288,,,,288,,,,288,,,,', +',,,,,288,,,,,,288,288,288,288,288,288,288,288,288,288,288,288,288,288', +'288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288', +'288,288,288,260,,260,,,,,,,,,,,,,,,,,,,,,,,,,,260,260,,,,260,,,,260', +',,,,,,,,,260,,,,,,260,260,260,260,260,260,260,260,260,260,260,260,260', +'260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260', +'260,260,260,260,87,,87,,,,,,,,,,,,,,,,,,,,,,,,,,87,87,,,,87,,,,87,,', +',,,,,87,,87,,,,,,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87', +'87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,218,,218,,,,,,,,', +',,,,,,,,,,,,,,,,,218,218,,,,218,,,,218,,,,,,,,,,218,,,,,,218,218,218', +'218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218', +'218,218,218,218,218,218,218,218,218,218,218,218,218,218,99,99,,,,,,', +',99,,,,,,,,,,99,,,,,,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99', +'99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,248,248,,,,,,', +',248,,,,,,,,,,248,,,,,,248,248,248,248,248,248,248,248,248,248,248,248', +'248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248', +'248,248,248,248,248,103,103,,,,,,,,103,,,,,,,,,,103,,,,,,103,103,103', +'103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103', +'103,103,103,103,103,103,103,103,103,103,103,205,205,,,,,,,,205,,,,,', +',,,,205,,,,,,205,205,205,205,205,205,205,205,205,205,205,205,205,205', +'205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205', +'241,241,,,,,,,,241,,,,,,,,,,241,,,,,,241,241,241,241,241,241,241,241', +'241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241', +'241,241,241,241,241,241,238,238,,,,,,,,238,,,,,,,,,,238,,,,,,238,238', +'238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238', +'238,238,238,238,238,238,238,238,238,238,238,238,237,,,,,,,,237,,,,,', +',,,,237,,,,,,237,237,237,237,237,237,237,237,237,237,237,237,237,237', +'237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237', +'276,,,,,,,,276,,,,,,,,,,276,,,,,,276,276,276,276,276,276,276,276,276', +'276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276', +'276,276,276,276,276,275,,,,,,,,275,,,,,,,,,,275,,,,,,275,275,275,275', +'275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275', +'275,275,275,275,275,275,275,275,275,275,297,,,,,,,,297,,,,,,,,,,297', +',,,,,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297', +'297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,296,,,,', +',,,296,,,,,,,,,,296,,,,,,296,296,296,296,296,296,296,296,296,296,296', +'296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296', +'296,296,296,77,,,,,,,,,,77,,,,,,77,77,77,77,77,77,77,77,77,77,77,77', +'77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,94,,,,,,,,,,94', +',,,,,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94', +'94,94,94,94,94,94,94,94,94,226,,,,,,,,,,226,,,,,,226,226,226,226,226', +'226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226', +'226,226,226,226,226,226,226,226,227,,,,,,227,227,227,227,227,227,227', +'227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227', +'227,227,227,227,227,227,230,,,,,,230,230,230,230,230,230,230,230,230', +'230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230', +'230,230,230,230,219,,,,,,219,219,219,219,219,219,219,219,219,219,219', +'219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219', +'219,219,215,,,,,,215,215,215,215,215,215,215,215,215,215,215,215,215', +'215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215', +'222,,,,,,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222', +'222,222,222,222,222,222,222,222,222,222,222,222,222,222,222' ] + racc_action_check = arr = Array.new(8867, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -707,349 +670,341 @@ clist = [ end racc_action_pointer = [ - 4040, 245, 311, 280, nil, 6866, 212, nil, nil, 562, - 656, 7041, nil, 844, 253, nil, nil, nil, nil, nil, - nil, 246, 1126, nil, nil, nil, nil, nil, nil, 141, - 1314, nil, nil, nil, 143, 113, nil, 8002, 60, 274, - nil, 161, 164, nil, 2066, nil, nil, nil, 2160, nil, - nil, nil, nil, 2254, nil, nil, nil, 2348, nil, 2442, - nil, nil, nil, 2536, 2630, nil, nil, nil, 2724, nil, - 93, 2912, 3006, nil, nil, 9, 115, nil, 313, -71, - 225, nil, 9434, 73, 156, 3852, 8512, -2, 8885, 344, - 114, 295, 9056, 4604, 77, nil, nil, 205, 145, 4980, - 92, 5168, 5262, 5356, 5450, 5544, 5638, 6766, 5826, 5920, - 6014, -2, 6202, 6296, 6390, 6484, 6578, 6672, 5732, 6108, - 3758, 3382, 321, -40, 750, 468, 374, 5074, 938, 1972, - 4886, 4792, 4698, 4510, 4416, 4322, nil, 4228, 4134, nil, - 218, 240, nil, 240, nil, -1, nil, nil, nil, 165, - 3946, 120, 110, 6821, nil, 3664, nil, 3570, nil, 273, - 257, 197, 7237, 461, 8342, 411, 438, nil, nil, 250, - 3476, 8087, 9526, 232, 257, 204, 126, nil, 3288, 3194, - 180, 7917, nil, nil, 255, 77, 9, nil, 7662, nil, - 26, 3100, 2818, -17, 7577, 664, 1134, 208, 9562, 1416, - 367, 7407, 9670, 1322, 299, 9598, nil, 1228, 108, 8767, - 9480, 9634, 1040, 1435, 9706, 476, 1341, 127, 185, 382, - 1247, 9277, 9112, 570, 1153, 8944, 946, 1526, 9000, 852, - 304, 758, 1510, nil, nil, nil, nil, nil, nil, nil, - 6951, nil, nil, 187, 167, 175, 8826, nil, -13, nil, - 1878, 1784, nil, 8172, 145, nil, nil, nil, nil, 209, - 8597, 8682, nil, 114, nil, -16, nil, 9387, 9222, nil, - 1690, 1596, 210, nil, nil, 27, 1502, 104, 166, nil, - 8427, 1408, 1220, 8257, 1032, nil, nil, nil, 9332, 9167, - nil, -7, 7832, nil, 231, nil, -22, 7747, 7492, 7184, - 7094, 63, 186, 276, nil, 6866, nil, nil, 7322, nil, - nil ] + 4315, 227, 190, 269, nil, 163, nil, 427, 255, 585, + nil, 133, nil, nil, 6232, nil, 822, 5978, 980, nil, + nil, nil, 164, nil, nil, nil, 181, nil, nil, nil, + 1217, nil, nil, nil, nil, nil, -41, 1375, nil, nil, + nil, 172, 4, 7408, nil, 310, 168, nil, nil, 1866, + nil, nil, 1945, nil, nil, 2024, nil, nil, 2103, nil, + nil, 2182, nil, 2261, nil, nil, nil, 2340, nil, 2419, + 0, nil, 122, 61, 2735, 67, 6973, 8510, 3051, nil, + nil, 117, nil, 130, 176, 3367, nil, 7756, nil, 289, + nil, 287, 140, 145, 8556, 3920, 15, 160, 166, 7902, + -2, 319, 294, 8020, 4648, nil, 61, nil, 225, -17, + 4964, 5043, 5122, nil, 5201, 5280, nil, 5359, 5438, 5517, + 5596, 5675, 4885, 3130, 2814, 2656, 901, 743, 664, 506, + 6038, 348, 5754, 4806, 4727, 4569, 4490, 4411, 4236, 4157, + 254, 171, 4078, 3999, 3841, 3762, 3683, 3604, 3525, 3446, + 3288, nil, 109, 154, nil, nil, nil, 3209, nil, -2, + 277, -6, -36, -10, 7234, 7147, 293, 262, 92, -56, + 43, nil, nil, 126, 7060, nil, 2972, 94, nil, 103, + 72, 6886, nil, nil, nil, 5799, nil, 146, 329, 113, + nil, 2577, 2498, 160, nil, 270, 239, 264, nil, 6625, + nil, 292, 1787, 1708, -11, 8076, 1462, 751, 6227, 672, + 6538, 6451, 6579, 356, 87, 8746, 593, 217, 7843, 8710, + 514, 113, 8782, nil, 435, 282, 8602, 8638, 6666, 922, + 8674, 6318, 988, 218, 138, 4323, 1067, 8243, 8188, 6405, + 909, 8132, 6492, 830, nil, nil, nil, nil, 7961, 72, + 75, nil, -21, nil, -7, -47, nil, 7321, 1629, 1550, + 7669, 1454, 23, nil, nil, nil, nil, 302, 6277, 6799, + nil, 86, nil, 91, nil, 8353, 8298, 1296, 1138, nil, + 92, nil, 179, 259, nil, 1059, nil, nil, 7582, 7495, + 6083, 6175, nil, nil, nil, nil, 8463, 8408, nil, 223, + nil, -20, -46, 6712, nil, 5886, 253, nil, 235, 2893, + nil, nil, nil, 6364 ] racc_action_default = [ - -1, -100, -118, -181, -17, -181, -181, -18, -126, -181, - -181, -46, -19, -181, -181, -34, -20, -21, -47, -22, - -28, -181, -181, -23, -29, -2, -30, -31, -32, -3, - -181, -104, -35, -33, -181, -181, -36, -5, -181, -174, - -37, -8, -181, -9, -181, -98, -38, -10, -181, -105, - -39, -96, -11, -181, -106, -40, -97, -181, -12, -181, - -107, -103, -26, -181, -181, -108, -27, -13, -181, -14, - -124, -136, -181, -15, -16, -181, -118, -119, -181, -181, - -181, -44, -56, -181, -125, -136, -181, -181, -45, -50, - -181, -181, -150, -7, -181, -25, -4, -157, -181, -181, + -1, -181, -136, -181, -15, -124, -16, -181, -118, -181, + -17, -181, -18, -126, -181, -19, -181, -46, -181, -34, + -20, -28, -181, -21, -29, -31, -181, -47, -22, -35, + -181, -2, -30, -23, -36, -32, -3, -181, -104, -37, + -33, -181, -181, -5, -38, -174, -8, -39, -9, -181, + -40, -10, -181, -105, -103, -181, -106, -11, -181, -107, + -26, -181, -12, -181, -108, -27, -13, -181, -14, -181, + -181, -98, -100, -181, -181, -181, -137, -55, -136, -110, + -114, -181, -129, -181, -181, -181, -115, -181, -44, -118, + -119, -181, -181, -181, -56, -136, -125, -181, -50, -45, + -181, -181, -181, -150, -7, -25, -181, -4, -157, -181, + -181, -181, -181, -58, -181, -181, -57, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, - -181, -93, -181, -181, -181, -181, -181, -181, -181, -181, + -93, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, - -181, -181, -181, -181, -181, -181, -58, -181, -181, -57, - -181, -181, -172, -174, -176, -181, -178, -114, -128, -181, - -181, -181, -181, -181, -115, -136, -109, -181, -95, -51, - -48, -49, -153, -52, -181, -54, -53, -129, -110, -181, - -181, -137, -55, -181, -181, -181, -181, -117, -181, -181, - -181, -137, -170, -151, -181, -181, -146, 311, -6, -24, - -181, -181, -181, -181, -154, -81, -70, -59, -83, -71, - -60, -179, -84, -72, -61, -85, -82, -73, -62, -180, - -91, -86, -74, -63, -87, -75, -64, -181, -181, -76, - -65, -92, -88, -77, -66, -89, -78, -67, -90, -79, - -68, -80, -69, -94, -99, -173, -177, -171, -175, -111, - -181, -112, -113, -127, -181, -181, -41, -152, -181, -143, - -181, -181, -135, -138, -181, -101, -123, -121, -120, -181, - -42, -43, -132, -181, -147, -181, -158, -159, -160, -156, - -181, -181, -155, -102, -116, -130, -181, -181, -181, -165, - -140, -181, -181, -139, -181, -122, -149, -148, -162, -161, - -131, -181, -144, -163, -181, -166, -181, -141, -142, -102, - -181, -167, -181, -181, -169, -181, -133, -168, -145, -164, - -134 ] + -181, -172, -181, -174, -176, -178, -109, -181, -128, -181, + -51, -48, -49, -52, -153, -181, -54, -53, -181, -181, + -181, -96, -97, -181, -138, -143, -181, -181, -135, -181, + -181, -137, -111, -112, -113, -181, -170, -181, -181, -181, + -117, -181, -181, -181, -151, -181, -181, -146, 314, -6, + -24, -181, -181, -181, -181, -90, -79, -68, -80, -69, + -179, -154, -81, -70, -59, -83, -71, -60, -180, -84, + -72, -61, -85, -82, -73, -62, -91, -86, -74, -63, + -87, -75, -64, -181, -181, -76, -65, -92, -88, -77, + -66, -89, -78, -67, -171, -175, -173, -177, -41, -181, + -127, -152, -181, -99, -181, -181, -95, -140, -181, -181, + -139, -181, -130, -116, -123, -121, -120, -181, -42, -43, + -132, -181, -147, -181, -158, -159, -160, -181, -181, -156, + -155, -102, -181, -181, -165, -181, -94, -101, -142, -141, + -181, -102, -131, -122, -149, -148, -162, -161, -166, -181, + -163, -181, -181, -144, -133, -181, -181, -169, -167, -181, + -134, -164, -168, -145 ] racc_goto_table = [ - 25, 84, 83, 154, 167, 168, 82, 193, 98, 169, - 78, 29, 86, 87, 88, 81, 89, 21, 167, 168, - 279, 144, 291, 180, 186, 92, 277, 234, 237, 93, - 140, 143, 154, 290, 96, 142, 146, nil, nil, nil, - nil, 94, nil, nil, nil, 154, 154, 159, nil, 295, - nil, 160, nil, nil, nil, nil, 161, nil, nil, 34, - 162, nil, 163, 257, 258, nil, 164, 165, 304, nil, - nil, 166, nil, 90, 171, 172, nil, nil, 175, nil, - nil, nil, nil, nil, 174, nil, nil, nil, 181, 81, - nil, nil, nil, 245, 93, 217, 188, nil, nil, nil, - nil, 158, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 236, 272, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 235, - 231, 232, nil, nil, nil, 182, nil, 285, nil, 244, - 243, nil, nil, 240, nil, nil, nil, nil, 181, nil, - 246, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 253, 175, nil, 259, nil, 167, 168, - nil, 260, 261, nil, nil, nil, nil, nil, 81, 81, - nil, nil, nil, nil, 267, 268, nil, nil, nil, 233, - nil, nil, nil, nil, 238, 154, 154, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 247, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 264, nil, nil, nil, nil, nil, - nil, 281, 269, 280, 283, nil, nil, nil, nil, nil, - nil, 278, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 81, 288, 289, nil, nil, nil, 296, 292, - nil, nil, nil, nil, 297, 298, nil, 300, nil, nil, - 278, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 307, 305, nil, nil, 308, nil, nil, nil, 278, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 286, nil, 287, nil, nil, nil, nil, nil, + 31, 86, 71, 41, 88, 76, 77, 109, 158, 156, + 87, 97, 94, 96, 173, 91, 265, 266, 75, 98, + 99, 100, 26, 302, 284, 101, 36, 282, 197, 244, + 204, 70, 153, 103, 292, 151, 104, 155, nil, nil, + nil, 107, 86, nil, nil, nil, nil, nil, nil, 154, + nil, nil, 160, nil, 298, 161, nil, nil, 162, 158, + 156, 163, nil, 106, 164, nil, 165, nil, nil, nil, + 166, nil, 167, 307, nil, nil, nil, 174, nil, nil, + nil, 181, nil, nil, nil, 88, nil, nil, 185, nil, + 186, 188, 86, 86, 180, 293, 187, nil, 181, nil, + nil, nil, nil, nil, nil, 233, 104, 199, nil, nil, + 254, 193, nil, 205, 206, 207, nil, 208, 209, nil, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 246, nil, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 280, 245, 250, 247, 249, nil, + 248, nil, nil, nil, nil, nil, nil, 251, nil, 253, + nil, nil, nil, nil, nil, nil, 256, 259, nil, 257, + 260, nil, nil, nil, 88, 88, nil, 188, nil, 267, + nil, nil, nil, nil, 268, 269, nil, nil, nil, 272, + nil, nil, nil, nil, nil, 275, 276, 279, nil, nil, + nil, nil, 158, 156, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 301, nil, nil, 303 ] + nil, nil, nil, nil, nil, 86, 86, nil, 283, nil, + nil, nil, nil, nil, nil, nil, nil, 286, nil, nil, + nil, 288, 289, 88, 290, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 294, nil, 295, nil, 283, nil, + 296, 297, nil, 301, nil, nil, nil, nil, 303, nil, + nil, nil, nil, nil, 305, nil, nil, 283, nil, nil, + nil, nil, 306, nil, nil, 308, nil, nil, 312, nil, + nil, nil, 313 ] racc_goto_check = [ - 2, 32, 6, 30, 36, 31, 5, 41, 40, 37, - 34, 3, 5, 5, 5, 21, 5, 1, 36, 31, - 43, 47, 38, 37, 39, 5, 42, 26, 44, 2, - 25, 46, 30, 8, 2, 45, 48, nil, nil, nil, - nil, 3, nil, nil, nil, 30, 30, 5, nil, 43, - nil, 5, nil, nil, nil, nil, 5, nil, nil, 4, - 5, nil, 5, 23, 23, nil, 5, 5, 43, nil, - nil, 5, nil, 4, 5, 5, nil, nil, 2, nil, - nil, nil, nil, nil, 34, nil, nil, nil, 5, 21, - nil, nil, nil, 37, 2, 40, 5, nil, nil, nil, - nil, 4, 5, 5, 5, 5, 5, 5, 5, 5, + 2, 30, 26, 4, 21, 5, 5, 40, 36, 31, + 5, 6, 5, 32, 25, 34, 23, 23, 37, 5, + 5, 5, 1, 38, 43, 4, 3, 42, 39, 44, + 41, 24, 46, 5, 8, 45, 2, 48, nil, nil, + nil, 2, 30, nil, nil, nil, nil, nil, nil, 47, + nil, nil, 5, nil, 43, 5, nil, nil, 5, 36, + 31, 5, nil, 3, 5, nil, 5, nil, nil, nil, + 5, nil, 5, 43, nil, nil, nil, 5, nil, nil, + nil, 5, nil, nil, nil, 21, nil, nil, 5, nil, + 4, 2, 30, 30, 37, 23, 34, nil, 5, nil, + nil, nil, nil, nil, nil, 40, 2, 5, nil, nil, + 25, 37, nil, 5, 5, 5, nil, 5, 5, nil, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 47, 41, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 45, - 5, 5, nil, nil, nil, 4, nil, 23, nil, 32, - 6, nil, nil, 5, nil, nil, nil, nil, 5, nil, - 5, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 5, 2, nil, 2, nil, 36, 31, - nil, 5, 5, nil, nil, nil, nil, nil, 21, 21, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 45, nil, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 41, 4, 6, 47, 32, nil, + 5, nil, nil, nil, nil, nil, nil, 4, nil, 26, + nil, nil, nil, nil, nil, nil, 4, 2, nil, 5, + 5, nil, nil, nil, 21, 21, nil, 2, nil, 2, nil, nil, nil, nil, 5, 5, nil, nil, nil, 4, - nil, nil, nil, nil, 4, 30, 30, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 4, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 4, nil, nil, nil, nil, nil, - nil, 2, 4, 5, 5, nil, nil, nil, nil, nil, - nil, 21, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 21, 5, 5, nil, nil, nil, 2, 5, - nil, nil, nil, nil, 5, 5, nil, 5, nil, nil, - 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 2, 5, nil, nil, 5, nil, nil, nil, 21, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 4, nil, 4, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, 5, 5, 4, nil, nil, + nil, nil, 36, 31, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 4, nil, nil, 4 ] + nil, nil, nil, nil, nil, 30, 30, nil, 21, nil, + nil, nil, nil, nil, nil, nil, nil, 4, nil, nil, + nil, 5, 5, 21, 5, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 4, nil, 4, nil, 21, nil, + 5, 5, nil, 2, nil, nil, nil, nil, 5, nil, + nil, nil, nil, nil, 5, nil, nil, 21, nil, nil, + nil, nil, 4, nil, nil, 4, nil, nil, 2, nil, + nil, nil, 5 ] racc_goto_pointer = [ - nil, 17, 0, 11, 59, 3, -3, nil, -242, nil, + nil, 22, 0, 26, 3, 3, -3, nil, -228, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 13, nil, -112, nil, -8, -114, nil, nil, nil, - -38, -65, -4, nil, 8, nil, -66, -62, -254, -66, - -27, -91, -222, -228, -117, -4, -8, -18, -3 ] + nil, -4, nil, -172, 30, -59, 1, nil, nil, nil, + -4, -37, -1, nil, 7, nil, -38, 16, -262, -73, + -35, -79, -225, -228, -123, -10, -13, 4, -8 ] racc_goto_default = [ - nil, nil, 250, nil, nil, 37, 41, 43, 47, 52, - 58, 67, 69, 73, 74, 4, 7, 12, 16, 17, - 19, 23, 31, 77, 38, 42, 45, 49, 54, 60, - 65, 156, 70, 147, nil, 8, 148, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil ] + nil, nil, 176, nil, nil, 43, 46, 48, 51, 57, + 62, 66, 68, 4, 6, 10, 12, 15, 20, 23, + 28, 33, 38, 90, nil, nil, nil, 53, 56, 59, + 64, 79, 5, 80, nil, 13, 82, nil, nil, nil, + nil, nil, nil, nil, 45, nil, nil, nil, nil ] racc_reduce_table = [ 0, 0, :racc_error, - 0, 100, :_reduce_1, - 1, 100, :_reduce_2, - 1, 100, :_reduce_3, - 2, 100, :_reduce_4, - 1, 102, :_reduce_5, - 3, 102, :_reduce_6, - 2, 102, :_reduce_7, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 3, 103, :_reduce_24, - 2, 103, :_reduce_25, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 121, :_reduce_28, - 1, 121, :_reduce_29, - 1, 121, :_reduce_30, - 1, 121, :_reduce_31, - 1, 121, :_reduce_32, - 1, 121, :_reduce_33, - 1, 121, :_reduce_34, - 1, 121, :_reduce_35, - 1, 121, :_reduce_36, - 1, 121, :_reduce_37, - 1, 121, :_reduce_38, - 1, 121, :_reduce_39, - 1, 121, :_reduce_40, - 3, 109, :_reduce_41, - 3, 122, :_reduce_42, - 3, 122, :_reduce_43, - 1, 122, :_reduce_44, - 2, 113, :_reduce_45, - 1, 113, :_reduce_46, - 1, 120, :_reduce_47, - 2, 108, :_reduce_48, - 2, 108, :_reduce_49, - 2, 108, :_reduce_50, - 2, 108, :_reduce_51, - 2, 108, :_reduce_52, - 2, 108, :_reduce_53, - 2, 108, :_reduce_54, - 2, 108, :_reduce_55, - 2, 108, :_reduce_56, - 2, 108, :_reduce_57, - 2, 108, :_reduce_58, - 3, 108, :_reduce_59, - 3, 108, :_reduce_60, - 3, 108, :_reduce_61, - 3, 108, :_reduce_62, - 3, 108, :_reduce_63, - 3, 108, :_reduce_64, - 3, 108, :_reduce_65, - 3, 108, :_reduce_66, - 3, 108, :_reduce_67, - 3, 108, :_reduce_68, - 3, 108, :_reduce_69, - 3, 108, :_reduce_70, - 3, 108, :_reduce_71, - 3, 108, :_reduce_72, - 3, 108, :_reduce_73, - 3, 108, :_reduce_74, - 3, 108, :_reduce_75, - 3, 108, :_reduce_76, - 3, 108, :_reduce_77, - 3, 108, :_reduce_78, - 3, 108, :_reduce_79, - 3, 108, :_reduce_80, - 3, 108, :_reduce_81, - 3, 108, :_reduce_82, - 3, 108, :_reduce_83, - 3, 108, :_reduce_84, - 3, 108, :_reduce_85, - 3, 108, :_reduce_86, - 3, 108, :_reduce_87, - 3, 108, :_reduce_88, - 3, 108, :_reduce_89, - 3, 108, :_reduce_90, - 3, 108, :_reduce_91, - 3, 108, :_reduce_92, - 2, 119, :_reduce_93, - 3, 107, :_reduce_94, - 2, 107, :_reduce_95, - 1, 124, :_reduce_96, - 1, 124, :_reduce_97, - 1, 123, :_reduce_98, - 3, 123, :_reduce_99, - 1, 125, :_reduce_none, - 4, 125, :_reduce_101, - 4, 118, :_reduce_102, - 1, 105, :_reduce_103, - 1, 105, :_reduce_104, - 1, 105, :_reduce_105, - 1, 105, :_reduce_106, - 1, 105, :_reduce_107, - 1, 105, :_reduce_108, - 2, 105, :_reduce_109, - 2, 105, :_reduce_110, - 2, 130, :_reduce_111, - 2, 130, :_reduce_112, - 2, 130, :_reduce_113, - 1, 130, :_reduce_114, - 1, 130, :_reduce_115, - 3, 132, :_reduce_116, - 3, 127, :_reduce_117, - 0, 133, :_reduce_118, - 1, 133, :_reduce_119, - 3, 133, :_reduce_120, - 3, 133, :_reduce_121, - 4, 133, :_reduce_122, - 3, 133, :_reduce_123, - 1, 106, :_reduce_124, - 2, 106, :_reduce_125, - 1, 106, :_reduce_126, - 3, 117, :_reduce_127, - 2, 131, :_reduce_128, - 2, 131, :_reduce_129, - 3, 135, :_reduce_130, - 4, 135, :_reduce_131, - 4, 134, :_reduce_132, - 6, 129, :_reduce_133, - 7, 129, :_reduce_134, - 3, 126, :_reduce_135, - 0, 136, :_reduce_136, - 1, 136, :_reduce_137, - 2, 136, :_reduce_138, - 3, 136, :_reduce_139, - 3, 136, :_reduce_140, - 4, 136, :_reduce_141, - 4, 136, :_reduce_142, - 2, 136, :_reduce_143, - 1, 137, :_reduce_144, - 3, 137, :_reduce_145, - 3, 111, :_reduce_146, - 4, 111, :_reduce_147, - 5, 111, :_reduce_148, - 3, 138, :_reduce_149, - 2, 112, :_reduce_150, - 3, 128, :_reduce_151, - 3, 114, :_reduce_152, - 2, 114, :_reduce_153, - 3, 114, :_reduce_154, - 4, 115, :_reduce_155, - 4, 115, :_reduce_156, - 1, 139, :_reduce_157, - 3, 139, :_reduce_158, - 2, 140, :_reduce_159, - 2, 140, :_reduce_160, - 3, 140, :_reduce_161, - 3, 140, :_reduce_162, - 5, 116, :_reduce_163, - 7, 116, :_reduce_164, - 1, 141, :_reduce_165, - 2, 141, :_reduce_166, - 3, 142, :_reduce_167, - 4, 142, :_reduce_168, - 3, 142, :_reduce_169, - 3, 143, :_reduce_170, - 2, 144, :_reduce_171, - 1, 145, :_reduce_172, - 2, 145, :_reduce_173, - 0, 146, :_reduce_174, - 2, 146, :_reduce_175, - 1, 147, :_reduce_176, - 2, 147, :_reduce_177, - 2, 110, :_reduce_178, - 3, 110, :_reduce_179, - 3, 110, :_reduce_180 ] + 0, 102, :_reduce_1, + 1, 102, :_reduce_2, + 1, 102, :_reduce_3, + 2, 102, :_reduce_4, + 1, 104, :_reduce_5, + 3, 104, :_reduce_6, + 2, 104, :_reduce_7, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 1, 106, :_reduce_none, + 3, 105, :_reduce_24, + 2, 105, :_reduce_25, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 123, :_reduce_28, + 1, 123, :_reduce_29, + 1, 123, :_reduce_30, + 1, 123, :_reduce_31, + 1, 123, :_reduce_32, + 1, 123, :_reduce_33, + 1, 123, :_reduce_34, + 1, 123, :_reduce_35, + 1, 123, :_reduce_36, + 1, 123, :_reduce_37, + 1, 123, :_reduce_38, + 1, 123, :_reduce_39, + 1, 123, :_reduce_40, + 3, 111, :_reduce_41, + 3, 124, :_reduce_42, + 3, 124, :_reduce_43, + 1, 124, :_reduce_44, + 2, 115, :_reduce_45, + 1, 115, :_reduce_46, + 1, 122, :_reduce_47, + 2, 110, :_reduce_48, + 2, 110, :_reduce_49, + 2, 110, :_reduce_50, + 2, 110, :_reduce_51, + 2, 110, :_reduce_52, + 2, 110, :_reduce_53, + 2, 110, :_reduce_54, + 2, 110, :_reduce_55, + 2, 110, :_reduce_56, + 2, 110, :_reduce_57, + 2, 110, :_reduce_58, + 3, 110, :_reduce_59, + 3, 110, :_reduce_60, + 3, 110, :_reduce_61, + 3, 110, :_reduce_62, + 3, 110, :_reduce_63, + 3, 110, :_reduce_64, + 3, 110, :_reduce_65, + 3, 110, :_reduce_66, + 3, 110, :_reduce_67, + 3, 110, :_reduce_68, + 3, 110, :_reduce_69, + 3, 110, :_reduce_70, + 3, 110, :_reduce_71, + 3, 110, :_reduce_72, + 3, 110, :_reduce_73, + 3, 110, :_reduce_74, + 3, 110, :_reduce_75, + 3, 110, :_reduce_76, + 3, 110, :_reduce_77, + 3, 110, :_reduce_78, + 3, 110, :_reduce_79, + 3, 110, :_reduce_80, + 3, 110, :_reduce_81, + 3, 110, :_reduce_82, + 3, 110, :_reduce_83, + 3, 110, :_reduce_84, + 3, 110, :_reduce_85, + 3, 110, :_reduce_86, + 3, 110, :_reduce_87, + 3, 110, :_reduce_88, + 3, 110, :_reduce_89, + 3, 110, :_reduce_90, + 3, 110, :_reduce_91, + 3, 110, :_reduce_92, + 2, 121, :_reduce_93, + 5, 109, :_reduce_94, + 4, 109, :_reduce_95, + 1, 126, :_reduce_96, + 1, 126, :_reduce_97, + 1, 125, :_reduce_98, + 3, 125, :_reduce_99, + 1, 127, :_reduce_none, + 4, 127, :_reduce_101, + 4, 120, :_reduce_102, + 1, 107, :_reduce_103, + 1, 107, :_reduce_104, + 1, 107, :_reduce_105, + 1, 107, :_reduce_106, + 1, 107, :_reduce_107, + 1, 107, :_reduce_108, + 2, 107, :_reduce_109, + 2, 107, :_reduce_110, + 2, 132, :_reduce_111, + 2, 132, :_reduce_112, + 2, 132, :_reduce_113, + 1, 132, :_reduce_114, + 1, 132, :_reduce_115, + 3, 134, :_reduce_116, + 3, 129, :_reduce_117, + 0, 135, :_reduce_118, + 1, 135, :_reduce_119, + 3, 135, :_reduce_120, + 3, 135, :_reduce_121, + 4, 135, :_reduce_122, + 3, 135, :_reduce_123, + 1, 108, :_reduce_124, + 2, 108, :_reduce_125, + 1, 108, :_reduce_126, + 3, 119, :_reduce_127, + 2, 133, :_reduce_128, + 2, 133, :_reduce_129, + 3, 137, :_reduce_130, + 4, 137, :_reduce_131, + 4, 136, :_reduce_132, + 6, 131, :_reduce_133, + 7, 131, :_reduce_134, + 3, 128, :_reduce_135, + 0, 138, :_reduce_136, + 1, 138, :_reduce_137, + 2, 138, :_reduce_138, + 3, 138, :_reduce_139, + 3, 138, :_reduce_140, + 4, 138, :_reduce_141, + 4, 138, :_reduce_142, + 2, 138, :_reduce_143, + 1, 139, :_reduce_144, + 3, 139, :_reduce_145, + 3, 113, :_reduce_146, + 4, 113, :_reduce_147, + 5, 113, :_reduce_148, + 3, 140, :_reduce_149, + 2, 114, :_reduce_150, + 3, 130, :_reduce_151, + 3, 116, :_reduce_152, + 2, 116, :_reduce_153, + 3, 116, :_reduce_154, + 4, 117, :_reduce_155, + 4, 117, :_reduce_156, + 1, 141, :_reduce_157, + 3, 141, :_reduce_158, + 2, 142, :_reduce_159, + 2, 142, :_reduce_160, + 3, 142, :_reduce_161, + 3, 142, :_reduce_162, + 5, 118, :_reduce_163, + 7, 118, :_reduce_164, + 1, 143, :_reduce_165, + 2, 143, :_reduce_166, + 3, 144, :_reduce_167, + 4, 144, :_reduce_168, + 3, 144, :_reduce_169, + 3, 145, :_reduce_170, + 2, 146, :_reduce_171, + 1, 147, :_reduce_172, + 2, 147, :_reduce_173, + 0, 148, :_reduce_174, + 2, 148, :_reduce_175, + 1, 149, :_reduce_176, + 2, 149, :_reduce_177, + 2, 112, :_reduce_178, + 3, 112, :_reduce_179, + 3, 112, :_reduce_180 ] racc_reduce_n = 181 -racc_shift_n = 311 +racc_shift_n = 314 racc_token_table = { false => 0, @@ -1071,88 +1026,90 @@ racc_token_table = { :PROTOTYPE_ACCESS => 16, :SOAK_ACCESS => 17, :CODE => 18, - :PARAM => 19, - :NEW => 20, - :RETURN => 21, - :TRY => 22, - :CATCH => 23, - :FINALLY => 24, - :THROW => 25, - :BREAK => 26, - :CONTINUE => 27, - :FOR => 28, - :IN => 29, - :OF => 30, - :BY => 31, - :WHEN => 32, - :WHILE => 33, - :SWITCH => 34, - :LEADING_WHEN => 35, - :DELETE => 36, - :INSTANCEOF => 37, - :TYPEOF => 38, - :SUPER => 39, - :EXTENDS => 40, - :ARGUMENTS => 41, - :NEWLINE => 42, - :COMMENT => 43, - :JS => 44, - :INDENT => 45, - :OUTDENT => 46, - "?" => 47, - :UMINUS => 48, - :NOT => 49, - "!" => 50, - "!!" => 51, - "~" => 52, - "++" => 53, - "--" => 54, - "*" => 55, - "/" => 56, - "%" => 57, - "+" => 58, - "-" => 59, - "<<" => 60, - ">>" => 61, - ">>>" => 62, - "&" => 63, - "|" => 64, - "^" => 65, - "<=" => 66, - "<" => 67, - ">" => 68, - ">=" => 69, - "==" => 70, - "!=" => 71, - :IS => 72, - :ISNT => 73, - "&&" => 74, - "||" => 75, - :AND => 76, - :OR => 77, - "-=" => 78, - "+=" => 79, - "/=" => 80, - "*=" => 81, - "%=" => 82, - "." => 83, - "||=" => 84, - "&&=" => 85, - "?=" => 86, - :ASSIGN => 87, - "=>" => 88, - "==>" => 89, - "\n" => 90, - ";" => 91, - "," => 92, - "[" => 93, - "]" => 94, - "{" => 95, - "}" => 96, - "(" => 97, - ")" => 98 } + :PARAM_START => 19, + :PARAM => 20, + :PARAM_END => 21, + :NEW => 22, + :RETURN => 23, + :TRY => 24, + :CATCH => 25, + :FINALLY => 26, + :THROW => 27, + :BREAK => 28, + :CONTINUE => 29, + :FOR => 30, + :IN => 31, + :OF => 32, + :BY => 33, + :WHEN => 34, + :WHILE => 35, + :SWITCH => 36, + :LEADING_WHEN => 37, + :DELETE => 38, + :INSTANCEOF => 39, + :TYPEOF => 40, + :SUPER => 41, + :EXTENDS => 42, + :ARGUMENTS => 43, + :NEWLINE => 44, + :COMMENT => 45, + :JS => 46, + :INDENT => 47, + :OUTDENT => 48, + "?" => 49, + :UMINUS => 50, + :NOT => 51, + "!" => 52, + "!!" => 53, + "~" => 54, + "++" => 55, + "--" => 56, + "*" => 57, + "/" => 58, + "%" => 59, + "+" => 60, + "-" => 61, + "<<" => 62, + ">>" => 63, + ">>>" => 64, + "&" => 65, + "|" => 66, + "^" => 67, + "<=" => 68, + "<" => 69, + ">" => 70, + ">=" => 71, + "==" => 72, + "!=" => 73, + :IS => 74, + :ISNT => 75, + "&&" => 76, + "||" => 77, + :AND => 78, + :OR => 79, + "-=" => 80, + "+=" => 81, + "/=" => 82, + "*=" => 83, + "%=" => 84, + "." => 85, + "||=" => 86, + "&&=" => 87, + "?=" => 88, + :ASSIGN => 89, + "=>" => 90, + "==>" => 91, + "\n" => 92, + ";" => 93, + "," => 94, + "[" => 95, + "]" => 96, + "{" => 97, + "}" => 98, + "(" => 99, + ")" => 100 } -racc_nt_base = 99 +racc_nt_base = 101 racc_use_result_var = true @@ -1192,7 +1149,9 @@ Racc_token_to_s_table = [ "PROTOTYPE_ACCESS", "SOAK_ACCESS", "CODE", + "PARAM_START", "PARAM", + "PARAM_END", "NEW", "RETURN", "TRY", @@ -1889,42 +1848,42 @@ module_eval(<<'.,.,', 'grammar.y', 197) end .,., -module_eval(<<'.,.,', 'grammar.y', 202) - def _reduce_94(val, _values, result) - result = CodeNode.new(val[0], val[2], val[1]) - result - end -.,., - module_eval(<<'.,.,', 'grammar.y', 203) - def _reduce_95(val, _values, result) - result = CodeNode.new([], val[1], val[0]) + def _reduce_94(val, _values, result) + result = CodeNode.new(val[1], val[4], val[3]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 208) +module_eval(<<'.,.,', 'grammar.y', 205) + def _reduce_95(val, _values, result) + result = CodeNode.new([], val[3], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 210) def _reduce_96(val, _values, result) result = :func result end .,., -module_eval(<<'.,.,', 'grammar.y', 209) +module_eval(<<'.,.,', 'grammar.y', 211) def _reduce_97(val, _values, result) result = :boundfunc result end .,., -module_eval(<<'.,.,', 'grammar.y', 214) +module_eval(<<'.,.,', 'grammar.y', 216) def _reduce_98(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 215) +module_eval(<<'.,.,', 'grammar.y', 217) def _reduce_99(val, _values, result) result = val[0] << val[2] result @@ -1933,560 +1892,560 @@ module_eval(<<'.,.,', 'grammar.y', 215) # reduce 100 omitted -module_eval(<<'.,.,', 'grammar.y', 221) +module_eval(<<'.,.,', 'grammar.y', 223) def _reduce_101(val, _values, result) result = SplatNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 226) +module_eval(<<'.,.,', 'grammar.y', 228) def _reduce_102(val, _values, result) result = SplatNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 231) +module_eval(<<'.,.,', 'grammar.y', 233) def _reduce_103(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 232) +module_eval(<<'.,.,', 'grammar.y', 234) def _reduce_104(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 233) +module_eval(<<'.,.,', 'grammar.y', 235) def _reduce_105(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 234) +module_eval(<<'.,.,', 'grammar.y', 236) def _reduce_106(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 235) +module_eval(<<'.,.,', 'grammar.y', 237) def _reduce_107(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 236) +module_eval(<<'.,.,', 'grammar.y', 238) def _reduce_108(val, _values, result) result = ValueNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 237) +module_eval(<<'.,.,', 'grammar.y', 239) def _reduce_109(val, _values, result) result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 238) +module_eval(<<'.,.,', 'grammar.y', 240) def _reduce_110(val, _values, result) result = ValueNode.new(val[0], [val[1]]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 243) +module_eval(<<'.,.,', 'grammar.y', 245) def _reduce_111(val, _values, result) result = AccessorNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 244) +module_eval(<<'.,.,', 'grammar.y', 246) def _reduce_112(val, _values, result) result = AccessorNode.new(val[1], :prototype) result end .,., -module_eval(<<'.,.,', 'grammar.y', 245) +module_eval(<<'.,.,', 'grammar.y', 247) def _reduce_113(val, _values, result) result = AccessorNode.new(val[1], :soak) result end .,., -module_eval(<<'.,.,', 'grammar.y', 246) +module_eval(<<'.,.,', 'grammar.y', 248) def _reduce_114(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 247) +module_eval(<<'.,.,', 'grammar.y', 249) def _reduce_115(val, _values, result) result = SliceNode.new(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 252) +module_eval(<<'.,.,', 'grammar.y', 254) def _reduce_116(val, _values, result) result = IndexNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 257) +module_eval(<<'.,.,', 'grammar.y', 259) def _reduce_117(val, _values, result) result = ObjectNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 262) +module_eval(<<'.,.,', 'grammar.y', 264) def _reduce_118(val, _values, result) result = [] result end .,., -module_eval(<<'.,.,', 'grammar.y', 263) +module_eval(<<'.,.,', 'grammar.y', 265) def _reduce_119(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 264) +module_eval(<<'.,.,', 'grammar.y', 266) def _reduce_120(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 265) +module_eval(<<'.,.,', 'grammar.y', 267) def _reduce_121(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 267) +module_eval(<<'.,.,', 'grammar.y', 269) def _reduce_122(val, _values, result) result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 268) +module_eval(<<'.,.,', 'grammar.y', 270) def _reduce_123(val, _values, result) result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 273) +module_eval(<<'.,.,', 'grammar.y', 275) def _reduce_124(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 274) +module_eval(<<'.,.,', 'grammar.y', 276) def _reduce_125(val, _values, result) result = val[1].new_instance result end .,., -module_eval(<<'.,.,', 'grammar.y', 275) +module_eval(<<'.,.,', 'grammar.y', 277) def _reduce_126(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 280) +module_eval(<<'.,.,', 'grammar.y', 282) def _reduce_127(val, _values, result) result = ExtendsNode.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 285) +module_eval(<<'.,.,', 'grammar.y', 287) def _reduce_128(val, _values, result) result = CallNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 286) +module_eval(<<'.,.,', 'grammar.y', 288) def _reduce_129(val, _values, result) result = CallNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 291) +module_eval(<<'.,.,', 'grammar.y', 293) def _reduce_130(val, _values, result) result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 292) +module_eval(<<'.,.,', 'grammar.y', 294) def _reduce_131(val, _values, result) result = val[1] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 297) +module_eval(<<'.,.,', 'grammar.y', 299) def _reduce_132(val, _values, result) result = CallNode.new(Value.new('super'), val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 303) +module_eval(<<'.,.,', 'grammar.y', 305) def _reduce_133(val, _values, result) result = RangeNode.new(val[1], val[4]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 305) +module_eval(<<'.,.,', 'grammar.y', 307) def _reduce_134(val, _values, result) result = RangeNode.new(val[1], val[5], true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 310) +module_eval(<<'.,.,', 'grammar.y', 312) def _reduce_135(val, _values, result) result = ArrayNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 315) +module_eval(<<'.,.,', 'grammar.y', 317) def _reduce_136(val, _values, result) result = [] result end .,., -module_eval(<<'.,.,', 'grammar.y', 316) +module_eval(<<'.,.,', 'grammar.y', 318) def _reduce_137(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 317) +module_eval(<<'.,.,', 'grammar.y', 319) def _reduce_138(val, _values, result) result = [val[1]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 318) +module_eval(<<'.,.,', 'grammar.y', 320) def _reduce_139(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 319) +module_eval(<<'.,.,', 'grammar.y', 321) def _reduce_140(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 320) +module_eval(<<'.,.,', 'grammar.y', 322) def _reduce_141(val, _values, result) result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 321) +module_eval(<<'.,.,', 'grammar.y', 323) def _reduce_142(val, _values, result) result = val[0] << val[3] result end .,., -module_eval(<<'.,.,', 'grammar.y', 322) +module_eval(<<'.,.,', 'grammar.y', 324) def _reduce_143(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 327) +module_eval(<<'.,.,', 'grammar.y', 329) def _reduce_144(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 328) +module_eval(<<'.,.,', 'grammar.y', 330) def _reduce_145(val, _values, result) result = ([val[0]] << val[2]).flatten result end .,., -module_eval(<<'.,.,', 'grammar.y', 333) +module_eval(<<'.,.,', 'grammar.y', 335) def _reduce_146(val, _values, result) result = TryNode.new(val[1], val[2][0], val[2][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 334) +module_eval(<<'.,.,', 'grammar.y', 336) def _reduce_147(val, _values, result) result = TryNode.new(val[1], nil, nil, val[3]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 336) +module_eval(<<'.,.,', 'grammar.y', 338) def _reduce_148(val, _values, result) result = TryNode.new(val[1], val[2][0], val[2][1], val[4]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 341) +module_eval(<<'.,.,', 'grammar.y', 343) def _reduce_149(val, _values, result) result = [val[1], val[2]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 346) +module_eval(<<'.,.,', 'grammar.y', 348) def _reduce_150(val, _values, result) result = ThrowNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 351) +module_eval(<<'.,.,', 'grammar.y', 353) def _reduce_151(val, _values, result) result = ParentheticalNode.new(val[1], val[0].line) result end .,., -module_eval(<<'.,.,', 'grammar.y', 356) +module_eval(<<'.,.,', 'grammar.y', 358) def _reduce_152(val, _values, result) result = WhileNode.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 357) +module_eval(<<'.,.,', 'grammar.y', 359) def _reduce_153(val, _values, result) result = WhileNode.new(val[1], nil) result end .,., -module_eval(<<'.,.,', 'grammar.y', 358) +module_eval(<<'.,.,', 'grammar.y', 360) def _reduce_154(val, _values, result) result = WhileNode.new(val[2], Expressions.wrap(val[0])) result end .,., -module_eval(<<'.,.,', 'grammar.y', 365) +module_eval(<<'.,.,', 'grammar.y', 367) def _reduce_155(val, _values, result) result = ForNode.new(val[0], val[3], val[2][0], val[2][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 366) +module_eval(<<'.,.,', 'grammar.y', 368) def _reduce_156(val, _values, result) result = ForNode.new(val[3], val[2], val[1][0], val[1][1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 371) +module_eval(<<'.,.,', 'grammar.y', 373) def _reduce_157(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 372) +module_eval(<<'.,.,', 'grammar.y', 374) def _reduce_158(val, _values, result) result = [val[0], val[2]] result end .,., -module_eval(<<'.,.,', 'grammar.y', 377) +module_eval(<<'.,.,', 'grammar.y', 379) def _reduce_159(val, _values, result) result = {:source => val[1]} result end .,., -module_eval(<<'.,.,', 'grammar.y', 378) +module_eval(<<'.,.,', 'grammar.y', 380) def _reduce_160(val, _values, result) result = {:source => val[1], :object => true} result end .,., -module_eval(<<'.,.,', 'grammar.y', 380) +module_eval(<<'.,.,', 'grammar.y', 382) def _reduce_161(val, _values, result) result = val[0].merge(:filter => val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 382) +module_eval(<<'.,.,', 'grammar.y', 384) def _reduce_162(val, _values, result) result = val[0].merge(:step => val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 388) +module_eval(<<'.,.,', 'grammar.y', 390) def _reduce_163(val, _values, result) result = val[3].rewrite_condition(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 390) +module_eval(<<'.,.,', 'grammar.y', 392) def _reduce_164(val, _values, result) result = val[3].rewrite_condition(val[1]).add_else(val[5]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 395) +module_eval(<<'.,.,', 'grammar.y', 397) def _reduce_165(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 396) +module_eval(<<'.,.,', 'grammar.y', 398) def _reduce_166(val, _values, result) result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 401) +module_eval(<<'.,.,', 'grammar.y', 403) def _reduce_167(val, _values, result) result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., -module_eval(<<'.,.,', 'grammar.y', 403) +module_eval(<<'.,.,', 'grammar.y', 405) def _reduce_168(val, _values, result) result = IfNode.new(val[1], val[2], nil, {:statement => true}) result end .,., -module_eval(<<'.,.,', 'grammar.y', 404) +module_eval(<<'.,.,', 'grammar.y', 406) def _reduce_169(val, _values, result) result = val[2].add_comment(val[0]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 409) +module_eval(<<'.,.,', 'grammar.y', 411) def _reduce_170(val, _values, result) result = IfNode.new(val[1], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 414) +module_eval(<<'.,.,', 'grammar.y', 416) def _reduce_171(val, _values, result) result = val[1].force_statement result end .,., -module_eval(<<'.,.,', 'grammar.y', 419) +module_eval(<<'.,.,', 'grammar.y', 421) def _reduce_172(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 420) +module_eval(<<'.,.,', 'grammar.y', 422) def _reduce_173(val, _values, result) result = val[0].add_else(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 425) +module_eval(<<'.,.,', 'grammar.y', 427) def _reduce_174(val, _values, result) result = nil result end .,., -module_eval(<<'.,.,', 'grammar.y', 426) +module_eval(<<'.,.,', 'grammar.y', 428) def _reduce_175(val, _values, result) result = val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 431) +module_eval(<<'.,.,', 'grammar.y', 433) def _reduce_176(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 432) +module_eval(<<'.,.,', 'grammar.y', 434) def _reduce_177(val, _values, result) result = val[0].add_else(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 437) +module_eval(<<'.,.,', 'grammar.y', 439) def _reduce_178(val, _values, result) result = val[0].add_else(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 438) +module_eval(<<'.,.,', 'grammar.y', 440) def _reduce_179(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true}) result end .,., -module_eval(<<'.,.,', 'grammar.y', 439) +module_eval(<<'.,.,', 'grammar.y', 441) def _reduce_180(val, _values, result) result = IfNode.new(val[2], Expressions.wrap(val[0]), nil, {:statement => true, :invert => true}) result diff --git a/lib/coffee_script/rewriter.rb b/lib/coffee_script/rewriter.rb index 964aa191..bb573e38 100644 --- a/lib/coffee_script/rewriter.rb +++ b/lib/coffee_script/rewriter.rb @@ -6,7 +6,7 @@ module CoffeeScript class Rewriter # Tokens that must be balanced. - BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], [:INDENT, :OUTDENT]] + BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], [:INDENT, :OUTDENT], [:PARAM_START, :PARAM_END]] # Tokens that signal the start of a balanced pair. EXPRESSION_START = BALANCED_PAIRS.map {|pair| pair.first } @@ -19,8 +19,8 @@ module CoffeeScript # Tokens pairs that, in immediate succession, indicate an implicit call. IMPLICIT_FUNC = [:IDENTIFIER, :SUPER] - IMPLICIT_END = [:IF, :UNLESS, :FOR, :WHILE, "\n"] - IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM, + IMPLICIT_END = [:IF, :UNLESS, :FOR, :WHILE, "\n", :PARAM_START] + IMPLICIT_CALL = [:IDENTIFIER, :NUMBER, :STRING, :JS, :REGEX, :NEW, :PARAM_START, :TRY, :DELETE, :INSTANCEOF, :TYPEOF, :SWITCH, :ARGUMENTS, :TRUE, :FALSE, :YES, :NO, :ON, :OFF, '!', '!!', :NOT] @@ -34,7 +34,7 @@ module CoffeeScript # Single-line flavors of block expressions that have unclosed endings. # The grammar can't disambiguate them, so we insert the implicit indentation. SINGLE_LINERS = [:ELSE, "=>", "==>", :TRY, :FINALLY, :THEN] - SINGLE_CLOSERS = ["\n", :CATCH, :FINALLY, :ELSE, :OUTDENT, :LEADING_WHEN] + SINGLE_CLOSERS = ["\n", :CATCH, :FINALLY, :ELSE, :OUTDENT, :LEADING_WHEN, :PARAM_START] # Rewrite the token stream in multiple passes, one logical filter at # a time. This could certainly be changed into a single pass through the @@ -138,7 +138,8 @@ module CoffeeScript if (!tok || SINGLE_CLOSERS.include?(tok[0]) || (tok[0] == ')' && parens == 0)) && !(starter == :ELSE && tok[0] == :ELSE) - @tokens.insert(idx, [:OUTDENT, Value.new(2, line)]) + insertion = @tokens[idx - 1][0] == "," ? idx - 1 : idx + @tokens.insert(insertion, [:OUTDENT, Value.new(2, line)]) break end parens += 1 if tok[0] == '(' @@ -164,7 +165,7 @@ module CoffeeScript next 1 unless IMPLICIT_FUNC.include?(prev[0]) && IMPLICIT_CALL.include?(token[0]) @tokens.insert(i, ['(', Value.new('(', token[1].line)]) open = true - next 2 + next token[0] == :PARAM_START ? 1 : 2 end end @@ -188,7 +189,7 @@ module CoffeeScript end # We'd like to support syntax like this: - # el.click(event => + # el.click((event) => # el.hide()) # In order to accomplish this, move outdents that follow closing parens # inwards, safely. The steps to accomplish this are: diff --git a/test/fixtures/execution/test_arguments.coffee b/test/fixtures/execution/test_arguments.coffee index dcfb7d28..32b61e1a 100644 --- a/test/fixtures/execution/test_arguments.coffee +++ b/test/fixtures/execution/test_arguments.coffee @@ -1,4 +1,4 @@ -area: x, y, x1, y1 => +area: (x, y, x1, y1) => (x - x1) * (x - y1) x: y: 10 @@ -18,14 +18,14 @@ print(area( # Arguments are turned into arrays. -curried: => +curried: () => print area.apply(this, arguments.concat(20, 20)) is 100 curried 10, 10 # Arguments is not a special keyword -- it can be assigned to: -func: => +func: () => arguments: 25 arguments diff --git a/test/fixtures/execution/test_array_comprehension.coffee b/test/fixtures/execution/test_array_comprehension.coffee index b5005bd6..f0ab48c3 100644 --- a/test/fixtures/execution/test_array_comprehension.coffee +++ b/test/fixtures/execution/test_array_comprehension.coffee @@ -34,7 +34,7 @@ methods: ['one', 'two', 'three'] for method in methods name: method - obj[name]: => + obj[name]: () => "I'm " + name print obj.one() is "I'm one" diff --git a/test/fixtures/execution/test_assignment.coffee b/test/fixtures/execution/test_assignment.coffee index c1b5d127..ff25e765 100644 --- a/test/fixtures/execution/test_assignment.coffee +++ b/test/fixtures/execution/test_assignment.coffee @@ -12,7 +12,7 @@ print result is true and result2 is true # Assign to conditional. -get_x: => 10 +get_x: () => 10 if x: get_x() then 100 diff --git a/test/fixtures/execution/test_blocks.coffee b/test/fixtures/execution/test_blocks.coffee index 720d82af..4be80c69 100644 --- a/test/fixtures/execution/test_blocks.coffee +++ b/test/fixtures/execution/test_blocks.coffee @@ -1,4 +1,4 @@ -results: [1, 2, 3].map() x => +results: [1, 2, 3].map() (x) => x * x print results.join(' ') is '1 4 9' \ No newline at end of file diff --git a/test/fixtures/execution/test_calling_super.coffee b/test/fixtures/execution/test_calling_super.coffee index c2f619ce..e57baebc 100644 --- a/test/fixtures/execution/test_calling_super.coffee +++ b/test/fixtures/execution/test_calling_super.coffee @@ -1,21 +1,21 @@ -Base: => -Base::func: string => +Base: () => +Base::func: (string) => 'zero/' + string -FirstChild: => +FirstChild: () => FirstChild extends Base -FirstChild::func: string => +FirstChild::func: (string) => super('one/') + string -SecondChild: => +SecondChild: () => SecondChild extends FirstChild -SecondChild::func: string => +SecondChild::func: (string) => super('two/') + string -ThirdChild: => +ThirdChild: () => this.array: [1, 2, 3] ThirdChild extends SecondChild -ThirdChild::func: string => +ThirdChild::func: (string) => super('three/') + string result: (new ThirdChild()).func 'four' @@ -23,13 +23,13 @@ result: (new ThirdChild()).func 'four' print result is 'zero/one/two/three/four' -TopClass: arg => +TopClass: (arg) => this.prop: 'top-' + arg -SuperClass: arg => +SuperClass: (arg) => super 'super-' + arg -SubClass: => +SubClass: () => super 'sub' SuperClass extends TopClass diff --git a/test/fixtures/execution/test_chained_calls.coffee b/test/fixtures/execution/test_chained_calls.coffee index 1355015c..6d3725ae 100644 --- a/test/fixtures/execution/test_chained_calls.coffee +++ b/test/fixtures/execution/test_chained_calls.coffee @@ -1,4 +1,5 @@ -identity_wrap: x => => x +identity_wrap: (x) => + () => x result: identity_wrap(identity_wrap(true))()() diff --git a/test/fixtures/execution/test_everything.coffee b/test/fixtures/execution/test_everything.coffee index 7a482e5a..cc986018 100644 --- a/test/fixtures/execution/test_everything.coffee +++ b/test/fixtures/execution/test_everything.coffee @@ -1,4 +1,4 @@ -func: => +func: () => a: 3 b: [] @@ -9,7 +9,7 @@ func: => c: { "text": b other: null - something_else: x => x + 5 + something_else: (x) => x + 5 } c: 'error' unless 42 > 41 diff --git a/test/fixtures/execution/test_existence.coffee b/test/fixtures/execution/test_existence.coffee index 16c64c74..a0438aa9 100644 --- a/test/fixtures/execution/test_existence.coffee +++ b/test/fixtures/execution/test_existence.coffee @@ -26,7 +26,7 @@ print z is null and x is "EX" # Only evaluate once. counter: 0 -get_next_node: => +get_next_node: () => throw "up" if counter counter++ diff --git a/test/fixtures/execution/test_expressions.coffee b/test/fixtures/execution/test_expressions.coffee index 1760e341..042ea59c 100644 --- a/test/fixtures/execution/test_expressions.coffee +++ b/test/fixtures/execution/test_expressions.coffee @@ -5,7 +5,7 @@ items: [1, 2, 3, "bacon", 4, 5] for item in items break if item is "bacon" -findit: items => +findit: (items) => for item in items return item if item is "bacon" @@ -17,7 +17,7 @@ print findit(items) is "bacon" obj: { num: 5 - func: => + func: () => this.result: if false 10 else diff --git a/test/fixtures/execution/test_functions.coffee b/test/fixtures/execution/test_functions.coffee index bc85e206..4dde028c 100644 --- a/test/fixtures/execution/test_functions.coffee +++ b/test/fixtures/execution/test_functions.coffee @@ -1,6 +1,6 @@ x: 1 y: {} -y.x: => 3 +y.x: () => 3 print x is 1 print typeof(y.x) is 'function' @@ -9,17 +9,17 @@ print y.x.name is 'x' # The empty function should not cause a syntax error. -=> +() => obj: { name: "Fred" - bound: => - (==> print(this.name is "Fred"))() + bound: () => + (() ==> print(this.name is "Fred"))() - unbound: => - (=> print(!this.name?))() + unbound: () => + (() => print(!this.name?))() } obj.unbound() @@ -29,18 +29,18 @@ obj.bound() # The named function should be cleared out before a call occurs: # Python decorator style wrapper that memoizes any function -memoize: fn => +memoize: (fn) => cache: {} self: this - args... => + (args...) => key: args.toString() return cache[key] if cache[key] cache[key] = fn.apply(self, args) Math: { - Add: a, b => a + b - AnonymousAdd: (a, b => a + b) - FastAdd: memoize a, b => a + b + Add: (a, b) => a + b + AnonymousAdd: ((a, b) => a + b) + FastAdd: memoize (a, b) => a + b } print Math.Add(5, 5) is 10 diff --git a/test/fixtures/execution/test_funky_comments.coffee b/test/fixtures/execution/test_funky_comments.coffee index 8acaafd8..72652431 100644 --- a/test/fixtures/execution/test_funky_comments.coffee +++ b/test/fixtures/execution/test_funky_comments.coffee @@ -1,5 +1,5 @@ # comment -func: => +func: () => # comment false false # comment @@ -14,7 +14,7 @@ switch 'string' when null something_else() -=> +() => code() # comment diff --git a/test/fixtures/execution/test_literals.coffee b/test/fixtures/execution/test_literals.coffee index 4dfb3b8c..923014b5 100644 --- a/test/fixtures/execution/test_literals.coffee +++ b/test/fixtures/execution/test_literals.coffee @@ -1,4 +1,4 @@ -a: [(x => x), (x => x * x)] +a: [(x) => x, (x) => x * x] print a.length is 2 @@ -14,7 +14,7 @@ neg: (3 -4) print neg is -1 -func: => +func: () => return if true print func() is null diff --git a/test/fixtures/execution/test_operations.coffee b/test/fixtures/execution/test_operations.coffee index 9f0d51db..e9de9324 100644 --- a/test/fixtures/execution/test_operations.coffee +++ b/test/fixtures/execution/test_operations.coffee @@ -13,6 +13,6 @@ print 50 > 10 > 5 is parseInt('5', 10) # more than once. i: 0 -func: => i++ +func: () => i++ print 1 > func() < 1 diff --git a/test/fixtures/execution/test_splats.coffee b/test/fixtures/execution/test_splats.coffee index c00cf116..58338adc 100644 --- a/test/fixtures/execution/test_splats.coffee +++ b/test/fixtures/execution/test_splats.coffee @@ -1,4 +1,4 @@ -func: first, second, rest... => +func: (first, second, rest...) => rest.join ' ' result: func 1, 2, 3, 4, 5 @@ -8,7 +8,7 @@ print result is "3 4 5" gold: silver: bronze: the_field: null -medalists: first, second, third, rest... => +medalists: (first, second, third, rest...) => gold: first silver: second bronze: third diff --git a/test/fixtures/execution/test_switch.coffee b/test/fixtures/execution/test_switch.coffee index 80535cd0..a978faf9 100644 --- a/test/fixtures/execution/test_switch.coffee +++ b/test/fixtures/execution/test_switch.coffee @@ -16,7 +16,7 @@ result: switch num print result -func: num => +func: (num) => switch num when 2, 4, 6 true diff --git a/test/fixtures/generation/each.coffee b/test/fixtures/generation/each.coffee index 89bade61..544f96ed 100644 --- a/test/fixtures/generation/each.coffee +++ b/test/fixtures/generation/each.coffee @@ -1,6 +1,6 @@ # The cornerstone, an each implementation. # Handles objects implementing forEach, arrays, and raw objects. -_.each: obj, iterator, context => +_.each: (obj, iterator, context) => index: 0 try if obj.forEach diff --git a/test/fixtures/generation/each.tokens b/test/fixtures/generation/each.tokens index aa5d853e..9244f37d 100644 --- a/test/fixtures/generation/each.tokens +++ b/test/fixtures/generation/each.tokens @@ -1 +1 @@ -[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]] \ No newline at end of file +[[:COMMENT, [" The cornerstone, an each implementation.", " Handles objects implementing forEach, arrays, and raw objects."]], ["\n", "\n"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "each"], [:ASSIGN, ":"], [:PARAM_START, "("], [:PARAM, "obj"], [",", ","], [:PARAM, "iterator"], [",", ","], [:PARAM, "context"], [:PARAM_END, ")"], ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "index"], [:ASSIGN, ":"], [:NUMBER, "0"], ["\n", "\n"], [:TRY, "try"], [:INDENT, 2], [:IF, "if"], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], [:INDENT, 2], [:IDENTIFIER, "obj"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "forEach"], ["(", "("], [:IDENTIFIER, "iterator"], [",", ","], [:IDENTIFIER, "context"], [")", ")"], [:OUTDENT, 2], [:ELSE, "else"], [:IF, "if"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArray"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OR, "or"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "isArguments"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "item"], [",", ","], [:IDENTIFIER, "i"], [:IN, "in"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], [:ELSE, "else"], [:INDENT, 2], [:IDENTIFIER, "iterator"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "call"], ["(", "("], [:IDENTIFIER, "context"], [",", ","], [:IDENTIFIER, "obj"], ["[", "["], [:IDENTIFIER, "key"], ["]", "]"], [",", ","], [:IDENTIFIER, "key"], [",", ","], [:IDENTIFIER, "obj"], [")", ")"], [:FOR, "for"], [:IDENTIFIER, "key"], [:IN, "in"], [:IDENTIFIER, "_"], [:PROPERTY_ACCESS, "."], [:IDENTIFIER, "keys"], ["(", "("], [:IDENTIFIER, "obj"], [")", ")"], [:OUTDENT, 2], [:OUTDENT, 2], [:CATCH, "catch"], [:IDENTIFIER, "e"], [:INDENT, 2], [:THROW, "throw"], [:IDENTIFIER, "e"], [:IF, "if"], [:IDENTIFIER, "e"], [:ISNT, "isnt"], [:IDENTIFIER, "breaker"], [:OUTDENT, 2], ["\n", "\n"], [:IDENTIFIER, "obj"], [:OUTDENT, 2], ["\n", "\n"]] \ No newline at end of file diff --git a/test/fixtures/generation/statements_as_expressions.coffee b/test/fixtures/generation/statements_as_expressions.coffee index 0541d95f..a9ddccb0 100644 --- a/test/fixtures/generation/statements_as_expressions.coffee +++ b/test/fixtures/generation/statements_as_expressions.coffee @@ -10,7 +10,7 @@ catch error 3 ) -func: x => +func: (x) => return throw x print(x * x for x in [1..100]) \ No newline at end of file diff --git a/test/fixtures/generation/whitespace.coffee b/test/fixtures/generation/whitespace.coffee index 450fd9e5..94f816d4 100644 --- a/test/fixtures/generation/whitespace.coffee +++ b/test/fixtures/generation/whitespace.coffee @@ -1,20 +1,20 @@ # test -f1: x => +f1: (x) => x * x - f2: y => + f2: (y) => y * x f3: 3 # Parens can close on the proper level. -elements.each(el => - el.click(event => +elements.each((el) => + el.click((event) => el.reset() el.show() if event.active ) ) # Or, parens can close blocks early. -elements.each(el => - el.click(event => +elements.each((el) => + el.click((event) => el.reset() el.show() if event.active)) \ No newline at end of file diff --git a/test/unit/test_lexer.rb b/test/unit/test_lexer.rb index ec08df01..e9f10ac9 100644 --- a/test/unit/test_lexer.rb +++ b/test/unit/test_lexer.rb @@ -25,8 +25,9 @@ class LexerTest < Test::Unit::TestCase end def test_lexing_function_definition - code = "x, y => x * y" - assert @lex.tokenize(code) == [[:PARAM, "x"], [",", ","], [:PARAM, "y"], + code = "(x, y) => x * y" + assert @lex.tokenize(code) == [[:PARAM_START, "("], [:PARAM, "x"], + [",", ","], [:PARAM, "y"], [:PARAM_END, ")"], ["=>", "=>"], [:INDENT, 2], [:IDENTIFIER, "x"], ["*", "*"], [:IDENTIFIER, "y"], [:OUTDENT, 2], ["\n", "\n"]] end diff --git a/test/unit/test_parser.rb b/test/unit/test_parser.rb index fc0ae6aa..8e8738ff 100644 --- a/test/unit/test_parser.rb +++ b/test/unit/test_parser.rb @@ -29,7 +29,7 @@ class ParserTest < Test::Unit::TestCase end def test_parsing_an_function_definition - code = @par.parse("x, y => x * y").expressions.first + code = @par.parse("(x, y) => x * y").expressions.first assert code.params == ['x', 'y'] body = code.body.expressions.first assert body.is_a?(OpNode)