therubyracer 0.11.0beta8-x86-freebsd-9

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of therubyracer might be problematic. Click here for more details.

Files changed (92) hide show
  1. data/.gitignore +23 -0
  2. data/.travis.yml +10 -0
  3. data/Changelog.md +242 -0
  4. data/Gemfile +16 -0
  5. data/README.md +185 -0
  6. data/Rakefile +42 -0
  7. data/benchmarks.rb +218 -0
  8. data/ext/v8/accessor.cc +181 -0
  9. data/ext/v8/array.cc +26 -0
  10. data/ext/v8/backref.cc +45 -0
  11. data/ext/v8/build.rb +52 -0
  12. data/ext/v8/constants.cc +34 -0
  13. data/ext/v8/constraints.cc +52 -0
  14. data/ext/v8/context.cc +130 -0
  15. data/ext/v8/date.cc +18 -0
  16. data/ext/v8/exception.cc +38 -0
  17. data/ext/v8/extconf.rb +25 -0
  18. data/ext/v8/external.cc +43 -0
  19. data/ext/v8/function.cc +58 -0
  20. data/ext/v8/gc.cc +43 -0
  21. data/ext/v8/handles.cc +34 -0
  22. data/ext/v8/heap.cc +31 -0
  23. data/ext/v8/init.cc +39 -0
  24. data/ext/v8/init.so +0 -0
  25. data/ext/v8/invocation.cc +86 -0
  26. data/ext/v8/locker.cc +77 -0
  27. data/ext/v8/message.cc +51 -0
  28. data/ext/v8/object.cc +334 -0
  29. data/ext/v8/primitive.cc +8 -0
  30. data/ext/v8/rr.cc +83 -0
  31. data/ext/v8/rr.h +932 -0
  32. data/ext/v8/script.cc +80 -0
  33. data/ext/v8/signature.cc +18 -0
  34. data/ext/v8/stack.cc +76 -0
  35. data/ext/v8/string.cc +47 -0
  36. data/ext/v8/template.cc +175 -0
  37. data/ext/v8/trycatch.cc +87 -0
  38. data/ext/v8/v8.cc +87 -0
  39. data/ext/v8/value.cc +239 -0
  40. data/lib/v8.rb +30 -0
  41. data/lib/v8/access.rb +5 -0
  42. data/lib/v8/access/indices.rb +40 -0
  43. data/lib/v8/access/invocation.rb +47 -0
  44. data/lib/v8/access/names.rb +65 -0
  45. data/lib/v8/array.rb +26 -0
  46. data/lib/v8/context.rb +245 -0
  47. data/lib/v8/conversion.rb +36 -0
  48. data/lib/v8/conversion/array.rb +11 -0
  49. data/lib/v8/conversion/class.rb +119 -0
  50. data/lib/v8/conversion/code.rb +38 -0
  51. data/lib/v8/conversion/fixnum.rb +11 -0
  52. data/lib/v8/conversion/fundamental.rb +11 -0
  53. data/lib/v8/conversion/hash.rb +11 -0
  54. data/lib/v8/conversion/indentity.rb +31 -0
  55. data/lib/v8/conversion/method.rb +26 -0
  56. data/lib/v8/conversion/object.rb +28 -0
  57. data/lib/v8/conversion/primitive.rb +7 -0
  58. data/lib/v8/conversion/proc.rb +5 -0
  59. data/lib/v8/conversion/reference.rb +16 -0
  60. data/lib/v8/conversion/string.rb +12 -0
  61. data/lib/v8/conversion/symbol.rb +7 -0
  62. data/lib/v8/conversion/time.rb +13 -0
  63. data/lib/v8/error.rb +166 -0
  64. data/lib/v8/function.rb +28 -0
  65. data/lib/v8/object.rb +79 -0
  66. data/lib/v8/stack.rb +85 -0
  67. data/lib/v8/version.rb +3 -0
  68. data/lib/v8/weak.rb +70 -0
  69. data/spec/c/array_spec.rb +17 -0
  70. data/spec/c/constants_spec.rb +20 -0
  71. data/spec/c/exception_spec.rb +26 -0
  72. data/spec/c/external_spec.rb +9 -0
  73. data/spec/c/function_spec.rb +46 -0
  74. data/spec/c/handles_spec.rb +35 -0
  75. data/spec/c/locker_spec.rb +38 -0
  76. data/spec/c/object_spec.rb +46 -0
  77. data/spec/c/script_spec.rb +28 -0
  78. data/spec/c/string_spec.rb +16 -0
  79. data/spec/c/template_spec.rb +30 -0
  80. data/spec/c/trycatch_spec.rb +51 -0
  81. data/spec/mem/blunt_spec.rb +42 -0
  82. data/spec/redjs_spec.rb +10 -0
  83. data/spec/spec_helper.rb +45 -0
  84. data/spec/threading_spec.rb +52 -0
  85. data/spec/v8/context_spec.rb +19 -0
  86. data/spec/v8/conversion_spec.rb +52 -0
  87. data/spec/v8/error_spec.rb +165 -0
  88. data/spec/v8/function_spec.rb +9 -0
  89. data/spec/v8/object_spec.rb +15 -0
  90. data/thefrontside.png +0 -0
  91. data/therubyracer.gemspec +20 -0
  92. metadata +164 -0
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .rbx/
4
+ .rvmrc
5
+ .bundle
6
+ .config
7
+ .yardoc
8
+ .project
9
+ .cproject
10
+ Gemfile.lock
11
+ InstalledFiles
12
+ _yardoc
13
+ coverage
14
+ doc/
15
+ lib/bundler/man
16
+ lib/v8/*.bundle
17
+ lib/v8/*.so
18
+ pkg
19
+ rdoc
20
+ spec/reports
21
+ test/tmp
22
+ test/version_tmp
23
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
4
+ - 1.8.7
5
+ - rbx-18mode
6
+ - rbx-19mode
7
+ notifications:
8
+ recipients:
9
+ - cowboyd@thefrontside.net
10
+ script: bundle exec rake compile spec
data/Changelog.md ADDED
@@ -0,0 +1,242 @@
1
+ # Changelog
2
+
3
+ ## 0.11
4
+
5
+ * upgrade V8 version to 3.11.8
6
+ * remove dependency on libv8. enable compilation against system v8
7
+ * complete re-write of low-level C layer for dramatically increased stability and performance
8
+ * more faithful and complete coverage of the low-level C API
9
+ * ease the building of binary gems
10
+ * official support for Rubinius
11
+ * ability to query V8 for memory usage and set resource constraints
12
+ * extensible conversion framework for thunking Ruby values to V8 and vice-versa
13
+ * extensible invocation framework for calling Ruby code (Proc, Method, etc...) from JavaScript
14
+ * extensible access framework for interacting with Ruby properties from JavaScript
15
+ * provide explicit context teardown for distributed cycles of garbage.
16
+
17
+
18
+ ## 0.10.1 2012/04/05
19
+
20
+ * [bugfix] V8::Object#respond_to? did not call super
21
+
22
+ ## 0.10.0 2012/03/28
23
+
24
+ * [incompatible] embedded lambdas now take JS `this` object as first object
25
+ * add sponsorship image to the README
26
+ * enable Travis CI
27
+
28
+ ## 0.9.9 2011/11/08
29
+
30
+ * remove GCC specific C++ extension to fix llvm build.
31
+
32
+ ## 0.9.8 2011/11/07
33
+
34
+ * let Rake version float again.
35
+
36
+ ## 0.9.7 2011/10/06
37
+ * build fixes
38
+ * fix rake dependency at 0.8.7 while the Rake team sorts some shit out.
39
+
40
+ ## 0.9.6 2011/10/06
41
+
42
+ * make build compatible with Gentoo
43
+
44
+ ## 0.9.5 - 2011/10/05
45
+
46
+ * remove GCC specific code to enable build on BSD
47
+ * let Rake dependency float
48
+
49
+ ## 0.9.4 - 2011/08/22
50
+
51
+ * Fix an issue with the compilation include paths which allowed compilation against conflicting libv8's
52
+
53
+ ## 0.9.3 - 2011/08/11
54
+
55
+ * Better documentation for the C extension memory management
56
+ * Always lock V8 operations, always.
57
+ * GH-86 Context#[], Context#[]= always looks up values from the JavaScript scope, even when it's a Ruby object
58
+
59
+ ## 0.9.2 - 2011/06/23
60
+
61
+ * fix issue with 1.8.7 where object allocation inside of GC was segfaulting
62
+
63
+ ## 0.9.1 - 2011/06/17
64
+
65
+ * never perform V8 operations inside Ruby GC
66
+ * refactor locking interface
67
+ * add documentation for v8_handle
68
+
69
+ ## 0.9.0 - 2011/06/10
70
+
71
+ * extract libv8 into installable binary for most platforms
72
+ * fix numerous memory leaks
73
+ * expose the V8 debugger via V8::C::Debug::EnableAgent()
74
+ * force UTf-8 encoding on strings returned from javascript in ruby 1.9
75
+ * remove deprecated evaluate() methods
76
+ * make the currently executing JavaScript stack available via Context#stack
77
+
78
+ ## 0.8.1 - 2011/03/07
79
+
80
+ * upgrade to v8 3.1.8
81
+ * remove bin/v8 which conflicted with v8 executeable
82
+ * decruft all the crap that had accumulated in the gem
83
+ * Javascript Objects are now always mapped to the same V8::Object when read from the context
84
+
85
+ ## 0.8.0 - 2010/12/02
86
+
87
+ * every V8 Context gets its own unique access strategy
88
+ * ruby methods and procs embedded in javascript always return the same function per context.
89
+ * ruby classes and subclasses are now all connected via the javascript prototype chain
90
+ * better error reporting on syntax errors
91
+ * upgrade to rspec 2
92
+ * several bug fixes and stability fixes
93
+
94
+ ## 0.7.5 - 2010/08/03
95
+
96
+ * upgrade to V8 2.3.3
97
+ * property interceptors from ruby via [] and []=
98
+ * indexed property access via [] and []=
99
+ * property
100
+ * several bugfixes
101
+ * stability: eliminate many segfaults
102
+ * don't enumerate property setters such as foo= from javascript
103
+
104
+ ## 0.7.4 - 2010/06/15
105
+
106
+ * bug fix for rvm ruby installs incorrectly detected as 32bit
107
+
108
+ ## 0.7.3 - 2010/06/15
109
+
110
+ * don't catch SystemExit and NoMemoryError
111
+ * fix bug bundling gem
112
+
113
+ ## 0.7.2 - 2010/06/14
114
+
115
+ * embed ruby classes as constructors
116
+ * support for rubinius
117
+ * uniform backtrace() function on JSError mixes the ruby
118
+ * String::NewSymbol() is now scriptable
119
+ * InstanceTemplate(), PrototypeTemplate(), Inherit() methods on v8::FunctionTemplate now scriptable.
120
+ * reuse the standard ruby object access template
121
+ * fix a bunch of compile warnings
122
+ * Store any ruby object in V8 with V8::C::External
123
+
124
+ ## 0.7.1 - 2010/06/03
125
+
126
+ * Function#call() now uses the global scope for 'this' by default
127
+ * Function#methodcall() added to allow passing in 'this' object
128
+ * Function#new() method to invoke javascript constructor from ruby
129
+ * access javascript properties and call javascript methods from ruby
130
+ * bundled Jasmine DOM-Less browser testing framework.
131
+
132
+ * added Object::GetHiddenValue() to v8 metal
133
+ * added Handle::IsEmpty() to v8 metal
134
+ * fixed bug where iterating over arrays sometimes failed
135
+ * numerous bug /segfault fixes.
136
+
137
+ ## 0.7.0 - 2010/05/31
138
+
139
+ * upgraded to V8 2.1.10
140
+ * added low level scripting interface for V8 objects
141
+ * ruby object property/method access is now implemented in ruby
142
+ * auto-convert javascript arrays to rb arrays and vice-versa
143
+ * auto-convert ruby hashes into javascript objects
144
+ * auto-convert javascript Date into ruby Time object and vice versa.
145
+ * better exception handling when passing through multiple language boundaries
146
+ * objects maintain referential integrity when passing objects from ruby to javascript and vice-versa
147
+ * added debug compile option for getting C/C++ backtraces whenever segfaults occur.
148
+ * official support for REE 1.8.7
149
+ * fixed numerous segfaults
150
+ * implemented V8::Value#to_s
151
+ * the global scope is available to every V8::Context as the 'scope' attribute
152
+ * properly convert ruby boolean values into V8 booleans.
153
+
154
+ ## 0.6.3 - 2010/05/07
155
+
156
+ * FIX: linkage error on OSX /usr/bin/ruby
157
+
158
+ ## 0.6.2 - 2010/05/06
159
+
160
+ * FIX: linkage error on OSX 10.5
161
+
162
+ ## 0.6.1 - 2010/05/03
163
+
164
+ * call JavaScript functions from Ruby
165
+
166
+ ## 0.6.0 - 2010/03/31
167
+
168
+ * ruby 1.9 compatible
169
+ * full featured command line bin/v8 and bin/therubyracer
170
+ * self validating install (v8 --selftest)
171
+ * Only dependency to build gem from source is rubygems.
172
+
173
+ ## 0.5.5 - 2010/03/15
174
+
175
+ * fix string encoding issue that was breaking RHEL 5.x
176
+ * fix pthread linking issue on RHEL 5.2
177
+
178
+ ## 0.5.4 - 2010/03/09
179
+
180
+ * add ext directory to gem require paths which was causing problems for non-binary gems
181
+
182
+ ## 0.5.3 - 2010/03/01
183
+
184
+ * added full back trace to javascript code
185
+
186
+ ## 0.5.2 - 2010/02/26
187
+
188
+ * added javascript shell (bin/therubyracer)
189
+ * added to_s method for embedded ruby objects
190
+ * added line number and file name to error message.
191
+
192
+ ## 0.5.1 - 2010/02/17
193
+
194
+ * fix bug in 1.8.6 by creating Object#tap if it does not exist
195
+
196
+ ## 0.5.0 - 2010/02/17
197
+
198
+ * support for Linux 64 bit
199
+
200
+ ## 0.4.9 - 2010/02/16
201
+
202
+ * support for Linux 32 bit
203
+
204
+ ## 0.4.8 - 2010/02/08
205
+
206
+ * expose line number and source name on JavascriptErrors.
207
+
208
+ ## 0.4.5 - 2010/01/18
209
+
210
+ * case munging so that ruby methods(perl_case) are accessed through javascript in camelCase.
211
+ * access 0-arity ruby methods as javascript properties
212
+ * invoke ruby setters from javascript as properties
213
+ * contexts detect whether they are open or not and open when needed
214
+
215
+ ## 0.4.4 - 2010/01/14
216
+
217
+ * Ruby objects embedded into javascript are passed back to ruby as themselves and not a wrapped V8 object wrapping a ruby object.
218
+ * Use any ruby object as the scope of eval().
219
+ * quick and dirty V8.eval() method added
220
+ * native objects have a reference to the context that created them.
221
+ * context now has equality check.
222
+ * expose InContext() and GetCurrent() methods.
223
+ * fix a couple of segmentation faults
224
+
225
+ ## 0.4.3 - 2010/10/11
226
+
227
+ * access properties on Ruby objects with their camel case equivalents
228
+ * reflect JavaScript objects into Ruby and access their properties
229
+ * load JavaScript source from an IO object or by filename
230
+
231
+ ## 0.4.2 - 2010/10/10
232
+
233
+ * embed Ruby Objects into Javascript and call their methods
234
+
235
+ ## 0.4.1 - 2010/01/09
236
+
237
+ * embed bare Proc and Method objects into JavaScript and call them
238
+ * catch JavaScript exceptions from Ruby
239
+
240
+ ## 0.4.0 - 2009/12/21
241
+
242
+ * evaluate JavaScript code from inside Ruby.
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'redjs', :git => 'https://github.com/cowboyd/redjs.git'
6
+ gem "rake"
7
+ gem "rspec", "~> 2.0"
8
+ gem "rake-compiler"
9
+ gem 'gem-compiler' unless Object.const_defined?(:RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
10
+
11
+ group :libv8 do
12
+ gem 'libv8', "~> 3.11.8"
13
+ end
14
+
15
+
16
+
data/README.md ADDED
@@ -0,0 +1,185 @@
1
+ # therubyracer
2
+
3
+ * [http://github.com/cowboyd/therubyracer](http://github.com/cowboyd/therubyracer)
4
+ * [http://groups.google.com/group/therubyracer](http://groups.google.com/group/therubyracer)
5
+ * [irc://irc.freenode.net/therubyracer](http://groups.google.com/group/therubyracer)
6
+ * [Documentation](https://github.com/cowboyd/therubyracer/wiki)
7
+
8
+ ## DESCRIPTION
9
+
10
+ Embed the V8 Javascript interpreter into Ruby.
11
+
12
+
13
+ ## FEATURES
14
+
15
+ * Evaluate Javascript from with in Ruby
16
+ * Embed your Ruby objects into the Javascript world
17
+ * Manipulate JavaScript objects and call JavaScript functions from Ruby
18
+ * API compatible with the The Ruby Rhino (for JRuby: http://github.com/cowboyd/therubyrhino)
19
+
20
+ ## SYNOPSIS
21
+
22
+ gem install therubyracer
23
+
24
+ then in your ruby code
25
+
26
+ require 'v8'
27
+ # or if using bundler (as with Rails), add the following to your Gemfile
28
+ gem "therubyracer", :require => 'v8'
29
+
30
+ evaluate some simple javascript
31
+
32
+ cxt = V8::Context.new
33
+ cxt.eval('7 * 6') #=> 42
34
+
35
+ embed values into the scope of your context
36
+
37
+ cxt['foo'] = "bar"
38
+ cxt.eval('foo') # => "bar"
39
+
40
+ embed ruby code into your scope and call it from javascript
41
+
42
+ cxt["say"] = lambda {|this, word, times| word * times}
43
+ cxt.eval("say('Hello', 3)") #=> HelloHelloHello
44
+
45
+ embed a ruby object into your scope and access its properties/methods from javascript
46
+
47
+ class MyMath
48
+ def plus(lhs, rhs)
49
+ lhs + rhs
50
+ end
51
+ end
52
+
53
+ cxt['math'] = MyMath.new
54
+ cxt.eval("math.plus(20,22)") #=> 42
55
+
56
+ make a ruby object *be* your global javascript scope.
57
+
58
+ math = MyMath.new
59
+ V8::Context.new(:with => math) do |cxt|
60
+ cxt.eval("plus(20,22)") #=> 42
61
+ end
62
+
63
+ you can do the same thing with Object#eval_js
64
+
65
+ math.eval_js("plus(20,22)")
66
+
67
+ ## Different ways of loading javascript source
68
+
69
+ In addition to just evaluating strings, you can also use streams such as files.
70
+
71
+ evaluate bytes read from any File/IO object:
72
+
73
+ File.open("mysource.js") do |file|
74
+ cxt.eval(file, "mysource.js")
75
+ end
76
+
77
+ or load it by filename
78
+
79
+ cxt.load("mysource.js")
80
+
81
+
82
+ ## Safe by default, dangerous by demand
83
+
84
+ The Ruby Racer is designed to let you evaluate javascript as safely as possible unless you tell it to do something more
85
+ dangerous. The default context is a hermetically sealed javascript environment with only the standard javascript objects
86
+ and functions. Nothing from the ruby world is accessible at all.
87
+
88
+ For ruby objects that you explicitly embed into javascript, by default only the _public_ methods _below_ `Object` are
89
+ exposed by default. E.g.
90
+
91
+ class A
92
+ def a
93
+ "a"
94
+ end
95
+
96
+ def to_s
97
+ super
98
+ end
99
+ end
100
+
101
+ class B < A
102
+ def b
103
+ "b"
104
+ end
105
+ end
106
+
107
+
108
+ V8::Context.new do |cxt|
109
+ cxt['a'] = A.new
110
+ cxt['b'] = B.new
111
+ cxt.eval("a.a") # => 'a'
112
+ cxt.eval("b.b") # => 'b'
113
+ cxt.eval("b.a") # => 'a'
114
+ cxt.eval("b.to_s") # => #<B:0x101776be8> (because A explicitly defined it)
115
+ cxt.eval("b.object_id") #=> undefined, object_id is on Object
116
+ end
117
+
118
+ If needed, you can override the [Ruby Access](https://github.com/cowboyd/therubyracer/blob/master/lib/v8/access.rb)
119
+ to allow whatever behavior you'd like
120
+
121
+ More documentation can be found on the [github wiki](https://github.com/cowboyd/therubyracer/wiki)
122
+
123
+ ## PREREQUISITES
124
+
125
+ For platforms for which there is a binary version of therubyracer gem available, there are no
126
+ dependencies other than ruby and rubygems.
127
+
128
+ If there is not a binary version for your system, then you will need to compile it from source.
129
+ To do this, you must have v8 >= 3.11.8 installed somewhere on your system. There are several
130
+ ways of doing this. For both you will need a C++ compiler.
131
+
132
+ The first method involves using a version of the v8 source which is maintained
133
+ [as a rubygem called libv8][1]. To use it, all you have to do is
134
+ add the following to your Gemfile:
135
+
136
+ gem 'libv8', '~> 3.11.8'
137
+
138
+ This will download and build v8 from source for you as part of the gem installation
139
+ process. When therubyracer is installed, it will find this gem if it is present and
140
+ link against the v8 binaries contained therein.
141
+
142
+ If you cannot, or do not wish to use the libv8 rubygem, then you can either install
143
+ libv8 with you operating system's packaging system or you can [build it from source][2].
144
+ If you build from source, be sure to set the library=shared option. Also, if you install
145
+ this shared library into a place that is not on your standard lib and include paths, then
146
+ you can pass your non-standard locations to therubyracer using the
147
+ `--with-v8-include` and `--with-v8-lib` configuration options.
148
+
149
+
150
+ ## DEVELOP
151
+ git clone git://github.com/cowboyd/therubyracer.git
152
+ cd therubyracer
153
+ bundle install
154
+ rake compile
155
+
156
+ ## Sponsored by
157
+ <a href="http://thefrontside.net">![The Frontside](http://github.com/cowboyd/therubyracer/raw/master/thefrontside.png)</a>
158
+
159
+ ## LICENSE:
160
+
161
+ (The MIT License)
162
+
163
+ Copyright (c) 2009,2010,2011,2012 Charles Lowell
164
+
165
+ Permission is hereby granted, free of charge, to any person obtaining
166
+ a copy of this software and associated documentation files (the
167
+ 'Software'), to deal in the Software without restriction, including
168
+ without limitation the rights to use, copy, modify, merge, publish,
169
+ distribute, sublicense, and/or sell copies of the Software, and to
170
+ permit persons to whom the Software is furnished to do so, subject to
171
+ the following conditions:
172
+
173
+ The above copyright notice and this permission notice shall be
174
+ included in all copies or substantial portions of the Software.
175
+
176
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
177
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
178
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
179
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
180
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
181
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
182
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
183
+
184
+ [1]: https://github.com/cowboyd/libv8
185
+ [2]: http://code.google.com/p/v8/wiki/BuildingWithGYP