--- adit <[EMAIL PROTECTED]> wrote:

> /home/adit/Webappz/blablabla/trunk/lib/foo_interface.rb:1310: yacc
> stack overflow
>         error_message = "transaction declined "
> 
> 
> kawans, ada yg tau bagaimana cara mengatasi yacc stack overflow itu ?
> 
> di baris yg error tsb memang ada kode when-case lebih dari 100

when-case > 100 nampaknya mencurigakan. mungkin programnya perlu direstructure?

> hanya yg bikin sy bingung, itu hanya terjadi di mesin sy, sedangkan di
> komputer teman ataupun di staging serrver baik2 saja
 
di tempat saya juga terjadi, mulai when ke-123 :-)

# 122 whens is ok, 123 overflow
lots_of_when = (1..122).to_a.map do |i|
  <<"CODE"
  when /foo_#{sprintf("%03d", i)}/
    puts "got foo"
CODE
end.join('')

eval <<"CODE"
case "foo"
#{lots_of_when}
  else
    puts "nok"
end
CODE

> sy pikir awalnya masalahnye terletak pd Web Server, tap sy sudah coba ganti2
> dari thin, mongrel ataupun webrick masih saja tetap error, sy sudah coba
> tanya mr gugle, namun sejuh ini belum ada jawaban yg memuaskan
> 
> btw, ini keterangan kompie sy (Fedora 8)
> 
> [EMAIL PROTECTED] trunk]$ uname -a
> Linux localhost 2.6.23.1-42.fc8 #1 SMP Tue Oct 30 13:55:12 EDT 2007 i686
> i686 i386 GNU/Linux
> [EMAIL PROTECTED] trunk]$ ruby -v
> ruby 1.8.6 (2008-03-03 patchlevel 114) [i386-linux]
> [EMAIL PROTECTED] trunk]$ rails -v
> Rails 2.0.2
> [EMAIL PROTECTED] trunk]$
> 
> note :
> teman memakai Windows XP + Webrick
> staging server memakai CentOS + Thin

wah sama saya juga pake Fedora 8. tapi ruby 1.8.6 patchlevel 111 :-)

ok pertama2 that huge case-when doesn't seem right. 
tapi jika memang huge-case-when situ tidak bisa direstructure, coba ubah ke
dalam container. 
ini PoC yg terpikir oleh saya:

class HashLikeCaseWhen
  def initialize(any=proc{})
    @ary = []
    @any = any
  end
  def [](k)
    found = @ary.find {|e| e[0] === k}
    found ? found[1] : @any
  end
  def []=(k,v)
    @ary.push [k,v]
  end
end

when_year = HashLikeCaseWhen.new(proc { "Jazz" })
when_year[1850..1889] = proc { "Blues" }
when_year[1890..1909] = proc { "Ragtime" }
p when_year[1851].call # Blues
p when_year[2000].call # Jazz

rgds,
Edwin.



      ________________________________________________________ 
Bergabunglah dengan orang-orang yang berwawasan, di di bidang Anda! Kunjungi 
Yahoo! Answers saat ini juga di http://id.answers.yahoo.com/

Kirim email ke