So,

I am adding features to my parser at an amazing rate, 250+ tests 
already. It's so easy that i catch myself thinking i am cheating.
The other day i added qualified function calls in like 10 minutes or so. 
_Great_

But now i have hit this "hanging" issue and am not sure how to even 
debug. Generally speaking, sometimes when i make a small typing mistake, 
instead of getting an error from parslet i get silence. No matter how 
long i let it run, when i interrupt, it's always about the same 
stack-trace (below):

I put a test case for this up : 
https://github.com/ruby-in-ruby/crystal/blob/master/test/parser/test_fails.rb
If you look, it defines a function in a class, and generally speaking 
that works.
But the case has no brackets on the function, as is legal in ruby. But I 
haven't implemented that, so in my parser it's not legal.
Iif i add () after the function it works.

The function is defined here: 
https://github.com/ruby-in-ruby/crystal/blob/master/lib/parser/call_site.rb
but i that alone can't be the problem, because outside a class 
definition i do get the error, not the hang.

So, as i said, any clues to how i can debug that kind of thing ?

Torsten


             
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/source.rb:84:in
 
`bytepos=': Interrupt
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:46:in
 
`try_with_cache'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
 
`apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:35:in
 
`block in try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:34:in
 
`loop'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:34:in
 
`try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
 
`try_with_cache'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
 
`apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/named.rb:17:in
 
`apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/sequence.rb:29:in
 
`block in try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/sequence.rb:27:in
 
`each'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/sequence.rb:27:in
 
`each_with_index'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/sequence.rb:27:in
 
`try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
 
`try_with_cache'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
 
`apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/entity.rb:21:in
 
`try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
 
`try_with_cache'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
 
`apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/alternative.rb:35:in
 
`block in try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/alternative.rb:34:in
 
`map'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/alternative.rb:34:in
 
`try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
 
`try_with_cache'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
 
`apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:35:in
 
`block in try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:34:in
 
`loop'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:34:in
 
`try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
 
`try_with_cache'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
 
`apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/entity.rb:21:in
 
`try'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
 
`try_with_cache'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
 
`apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:70:in
 
`setup_and_apply'
     from 
/Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:30:in
 
`parse'

Reply via email to