rubyjs / therubyracer

Embed the V8 Javascript Interpreter into Ruby
1.66k stars 191 forks source link

Getting a SetHiddenError #326

Closed wr0ngway closed 8 months ago

wr0ngway commented 9 years ago

Getting the following exception: undefined method `SetHiddenValue' for #V8::C::Value:0x007f91fd575a30 https://github.com/cowboyd/therubyracer/blob/master/lib/v8/error.rb#L99

Note the exception ("e" at code ref above) here is a custom one being raised in ruby code that was called by javascript code.

OSX Yosemite Ruby 2.1.3p242 therubyracer 0.12.1 libv8 3.16.14.7

I'm a little out of date on versions, I'll try updating and see if the problem goes away, but unlikely as therubyracer ruby code is calling a method on a V8 C object it just created, so I'm guessing the C API changed...?

wr0ngway commented 9 years ago

Actually, I wasn't out of date, those are the latest versions of therubyracer/libv8 on rubygems

wr0ngway commented 9 years ago

The full trace (filtered to rubyracer on down) is:

/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/error.rb:99:in `rescue in protect'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/error.rb:96:in `protect'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/conversion/code.rb:23:in `call'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:97:in `RunWithTimeout'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:97:in `block (2 levels) in eval'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/error.rb:84:in `block in try'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/error.rb:83:in `call'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/error.rb:83:in `TryCatch'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/error.rb:83:in `try'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:97:in `block in eval'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:248:in `block (2 levels) in lock_scope_and_enter'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:245:in `call'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:245:in `HandleScope'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:245:in `block in lock_scope_and_enter'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:244:in `call'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:244:in `Locker'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:244:in `lock_scope_and_enter'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:204:in `enter'
/Users/mconway/.rvm/gems/ruby-2.1.3/gems/therubyracer-0.12.1/lib/v8/context.rb:94:in `eval'
wr0ngway commented 9 years ago

Note that when this happens, V8::C::Exception::Error(e.message) is actually returning nil, which would explain it not having the method. Why it returns nil, I have no idea - the e.message does have a string value.