--- 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/