therubyracer-st 0.11.0beta5-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. data/.gitignore +23 -0
  2. data/.travis.yml +10 -0
  3. data/Changelog.md +242 -0
  4. data/Gemfile +15 -0
  5. data/README.md +185 -0
  6. data/Rakefile +58 -0
  7. data/benchmarks.rb +217 -0
  8. data/ext/v8/accessor.cc +181 -0
  9. data/ext/v8/array.cc +26 -0
  10. data/ext/v8/backref.cc +54 -0
  11. data/ext/v8/build.rb +53 -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 +23 -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/invocation.cc +86 -0
  25. data/ext/v8/locker.cc +77 -0
  26. data/ext/v8/message.cc +51 -0
  27. data/ext/v8/object.cc +334 -0
  28. data/ext/v8/primitive.cc +8 -0
  29. data/ext/v8/rr.cc +83 -0
  30. data/ext/v8/rr.h +883 -0
  31. data/ext/v8/script.cc +80 -0
  32. data/ext/v8/signature.cc +18 -0
  33. data/ext/v8/stack.cc +75 -0
  34. data/ext/v8/string.cc +47 -0
  35. data/ext/v8/template.cc +175 -0
  36. data/ext/v8/trycatch.cc +86 -0
  37. data/ext/v8/v8.cc +87 -0
  38. data/ext/v8/value.cc +239 -0
  39. data/lib/v8.rb +36 -0
  40. data/lib/v8/access.rb +5 -0
  41. data/lib/v8/access/indices.rb +40 -0
  42. data/lib/v8/access/invocation.rb +47 -0
  43. data/lib/v8/access/names.rb +65 -0
  44. data/lib/v8/array.rb +26 -0
  45. data/lib/v8/context.rb +243 -0
  46. data/lib/v8/conversion.rb +35 -0
  47. data/lib/v8/conversion/array.rb +11 -0
  48. data/lib/v8/conversion/class.rb +120 -0
  49. data/lib/v8/conversion/code.rb +38 -0
  50. data/lib/v8/conversion/fundamental.rb +11 -0
  51. data/lib/v8/conversion/hash.rb +11 -0
  52. data/lib/v8/conversion/indentity.rb +31 -0
  53. data/lib/v8/conversion/method.rb +26 -0
  54. data/lib/v8/conversion/object.rb +28 -0
  55. data/lib/v8/conversion/primitive.rb +7 -0
  56. data/lib/v8/conversion/proc.rb +5 -0
  57. data/lib/v8/conversion/reference.rb +16 -0
  58. data/lib/v8/conversion/string.rb +12 -0
  59. data/lib/v8/conversion/symbol.rb +7 -0
  60. data/lib/v8/conversion/time.rb +13 -0
  61. data/lib/v8/error.rb +25 -0
  62. data/lib/v8/error/protect.rb +20 -0
  63. data/lib/v8/error/try.rb +15 -0
  64. data/lib/v8/function.rb +28 -0
  65. data/lib/v8/helper.rb +30 -0
  66. data/lib/v8/object.rb +79 -0
  67. data/lib/v8/util/weakcell.rb +29 -0
  68. data/lib/v8/version.rb +3 -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 +9 -0
  87. data/spec/v8/error_spec.rb +21 -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. data/vendor/v8.dll +0 -0
  93. metadata +161 -0
@@ -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
@@ -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
@@ -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 2012/11/08
29
+
30
+ * remove GCC specific C++ extension to fix llvm build.
31
+
32
+ ## 0.9.8 2012/11/07
33
+
34
+ * let Rake version float again.
35
+
36
+ ## 0.9.7 2012/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 2012/10/06
41
+
42
+ * make build compatible with Gentoo
43
+
44
+ ## 0.9.5 - 2012/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 - 1010/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,15 @@
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
+
10
+ group :libv8 do
11
+ gem 'libv8-st', "~> 3.11.8"
12
+ end
13
+
14
+
15
+
@@ -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