in doc-src/parsejs/lib/parsejs/grammar.kpeg.rb [4300:4407]
def _TryStatement
_save = self.pos
while true # choice
_save1 = self.pos
while true # sequence
_tmp = apply(:_TryTok)
unless _tmp
self.pos = _save1
break
end
_tmp = apply(:__hyphen_)
unless _tmp
self.pos = _save1
break
end
_tmp = apply(:_Block)
try = @result
unless _tmp
self.pos = _save1
break
end
_tmp = apply(:__hyphen_)
unless _tmp
self.pos = _save1
break
end
_tmp = apply(:_Catch)
catch = @result
unless _tmp
self.pos = _save1
break
end
_tmp = apply(:__hyphen_)
unless _tmp
self.pos = _save1
break
end
_save2 = self.pos
_tmp = apply(:_Finally)
@result = nil unless _tmp
unless _tmp
_tmp = true
self.pos = _save2
end
finally = @result
unless _tmp
self.pos = _save1
break
end
@result = begin; try_statement(try, catch, finally); end
_tmp = true
unless _tmp
self.pos = _save1
end
break
end # end sequence
break if _tmp
self.pos = _save
_save3 = self.pos
while true # sequence
_tmp = apply(:_TryTok)
unless _tmp
self.pos = _save3
break
end
_tmp = apply(:__hyphen_)
unless _tmp
self.pos = _save3
break
end
_tmp = apply(:_Block)
try = @result
unless _tmp
self.pos = _save3
break
end
_tmp = apply(:__hyphen_)
unless _tmp
self.pos = _save3
break
end
_tmp = apply(:_Finally)
finally = @result
unless _tmp
self.pos = _save3
break
end
@result = begin; try_statement(try, nil, finally); end
_tmp = true
unless _tmp
self.pos = _save3
end
break
end # end sequence
break if _tmp
self.pos = _save
break
end # end choice
set_failed_rule :_TryStatement unless _tmp
return _tmp
end