therubyracer-xcode 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.travis.yml +14 -0
  4. data/Changelog.md +263 -0
  5. data/Gemfile +12 -0
  6. data/README.md +227 -0
  7. data/Rakefile +42 -0
  8. data/benchmarks.rb +218 -0
  9. data/ext/v8/accessor.cc +181 -0
  10. data/ext/v8/array.cc +26 -0
  11. data/ext/v8/backref.cc +45 -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 +34 -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 +35 -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 +335 -0
  28. data/ext/v8/primitive.cc +8 -0
  29. data/ext/v8/rr.cc +83 -0
  30. data/ext/v8/rr.h +934 -0
  31. data/ext/v8/script.cc +115 -0
  32. data/ext/v8/signature.cc +18 -0
  33. data/ext/v8/stack.cc +76 -0
  34. data/ext/v8/string.cc +47 -0
  35. data/ext/v8/template.cc +175 -0
  36. data/ext/v8/trycatch.cc +87 -0
  37. data/ext/v8/v8.cc +87 -0
  38. data/ext/v8/value.cc +239 -0
  39. data/lib/therubyracer.rb +1 -0
  40. data/lib/v8/access/indices.rb +40 -0
  41. data/lib/v8/access/invocation.rb +47 -0
  42. data/lib/v8/access/names.rb +65 -0
  43. data/lib/v8/access.rb +5 -0
  44. data/lib/v8/array.rb +26 -0
  45. data/lib/v8/context.rb +258 -0
  46. data/lib/v8/conversion/array.rb +11 -0
  47. data/lib/v8/conversion/class.rb +119 -0
  48. data/lib/v8/conversion/code.rb +38 -0
  49. data/lib/v8/conversion/fixnum.rb +11 -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/conversion.rb +36 -0
  62. data/lib/v8/error.rb +169 -0
  63. data/lib/v8/function.rb +28 -0
  64. data/lib/v8/object.rb +79 -0
  65. data/lib/v8/stack.rb +85 -0
  66. data/lib/v8/version.rb +3 -0
  67. data/lib/v8/weak.rb +82 -0
  68. data/lib/v8.rb +30 -0
  69. data/spec/c/array_spec.rb +19 -0
  70. data/spec/c/constants_spec.rb +22 -0
  71. data/spec/c/exception_spec.rb +28 -0
  72. data/spec/c/external_spec.rb +11 -0
  73. data/spec/c/function_spec.rb +48 -0
  74. data/spec/c/handles_spec.rb +31 -0
  75. data/spec/c/locker_spec.rb +36 -0
  76. data/spec/c/object_spec.rb +47 -0
  77. data/spec/c/script_spec.rb +30 -0
  78. data/spec/c/string_spec.rb +18 -0
  79. data/spec/c/template_spec.rb +31 -0
  80. data/spec/c/trycatch_spec.rb +52 -0
  81. data/spec/mem/blunt_spec.rb +42 -0
  82. data/spec/redjs_spec.rb +10 -0
  83. data/spec/spec_helper.rb +41 -0
  84. data/spec/threading_spec.rb +64 -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 +167 -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 +22 -0
  92. metadata +186 -0
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Timeouts" do
4
+ it "allows for timeout on context" do
5
+ ctx = V8::Context.new(:timeout => 10)
6
+ lambda {ctx.eval("while(true){}")}.should(raise_error)
7
+
8
+ # context should not be bust after it exploded once
9
+ ctx["x"] = 1;
10
+ ctx.eval("x=2;")
11
+ ctx["x"].should == 2
12
+ end
13
+ end
14
+
15
+ describe "using v8 from multiple threads", :threads => true do
16
+
17
+ it "creates contexts from within threads" do
18
+ 10.times.collect do
19
+ Thread.new do
20
+ V8::Context.new
21
+ end
22
+ end.each {|t| t.join}
23
+ V8::Context.new
24
+ end
25
+
26
+ it "executes codes on multiple threads simultaneously" do
27
+ 5.times.collect{V8::Context.new}.collect do |ctx|
28
+ Thread.new do
29
+ ctx['x'] = 99
30
+ while ctx['x'] > 0
31
+ ctx.eval 'for (i=10000;i;i--){};--x'
32
+ end
33
+ end
34
+ end.each {|t| t.join}
35
+ end
36
+
37
+ it "can access the current thread id" do
38
+ V8::C::Locker() do
39
+ V8::C::V8::GetCurrentThreadId().should_not be_nil
40
+ end
41
+ end
42
+
43
+ it "can pre-empt a running JavaScript thread" do
44
+ pending "need to release the GIL while executing V8 code"
45
+ begin
46
+ V8::C::Locker::StartPreemption(2)
47
+ thread_id = nil
48
+ Thread.new do
49
+ loop until thread_id
50
+ puts "thread id: #{thread_id}"
51
+ V8::C::V8::TerminateExecution(thread_id)
52
+ end
53
+ Thread.new do
54
+ V8::C::Locker() do
55
+ thread_id = V8::C::V8::GetCurrentThreadId()
56
+ V8::Context.new {|cxt| cxt.eval('while (true) {}')}
57
+ end
58
+ end
59
+ V8::C::V8::TerminateExecution(thread_id)
60
+ ensure
61
+ V8::C::Locker::StopPreemption()
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe V8::Context do
4
+ it "can be disposed of" do
5
+ cxt = V8::Context.new
6
+ cxt.enter do
7
+ cxt['object'] = V8::Object.new
8
+ end
9
+ cxt.dispose()
10
+
11
+ lambda {cxt.eval('1 + 1')}.should raise_error
12
+ lambda {cxt['object']}.should raise_error
13
+ end
14
+
15
+ it "can be disposed of any number of times" do
16
+ cxt = V8::Context.new
17
+ 10.times {cxt.dispose()}
18
+ end
19
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+ require 'bigdecimal'
3
+ describe V8::Conversion do
4
+
5
+ let(:cxt) { V8::Context.new }
6
+
7
+ it "can embed BigDecimal values" do
8
+ cxt['big'] = BigDecimal.new('1.1')
9
+ cxt['big'].should eql BigDecimal.new('1.1')
10
+ end
11
+
12
+ it "doesn't try to use V8::Conversion::Class::* as root objects" do
13
+ klass = Class.new do
14
+ class << self
15
+ def test
16
+ Set.new
17
+ end
18
+ end
19
+ end
20
+
21
+ klass.test.should be_instance_of(::Set)
22
+ end
23
+
24
+ context "::Fixnum" do
25
+ context "for 32-bit numbers" do
26
+ it "should convert positive integer" do
27
+ cxt['fixnum_a'] = 123
28
+ cxt['fixnum_a'].should == 123
29
+ cxt['fixnum_a'].should be_instance_of(Fixnum)
30
+ end
31
+
32
+ it "should convert negative integer" do
33
+ cxt['fixnum_b'] = -123
34
+ cxt['fixnum_b'].should == -123
35
+ cxt['fixnum_b'].should be_instance_of(Fixnum)
36
+ end
37
+ end
38
+
39
+ context "for 64-bit numbers" do
40
+ it "should convert positive integer" do
41
+ cxt['fixnum_c'] = 0x100000000
42
+ cxt['fixnum_c'].should == 0x100000000
43
+ end
44
+
45
+ it "should convert negative integer" do
46
+ cxt['fixnum_d'] = -0x100000000
47
+ cxt['fixnum_d'].should == -0x100000000
48
+ end
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,167 @@
1
+ require 'spec_helper'
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
4
+
5
+ describe V8::Error do
6
+
7
+ before do
8
+ @cxt = V8::Context.new
9
+ @cxt['one'] = lambda do
10
+ @cxt.eval('two()', 'one.js')
11
+ end
12
+ @cxt['two'] = lambda do
13
+ @cxt.eval('three()', 'two.js')
14
+ end
15
+ end
16
+
17
+ it "captures a message without over nesting when the error is an error" do
18
+ throw! do |e|
19
+ e.message.should == "BOOM!"
20
+ end
21
+ end
22
+
23
+ it "captures the js message without over nesting when the error is a normal object" do
24
+ throw!('{foo: "bar"}') do |e|
25
+ e.message.should == "[object Object]"
26
+ end
27
+ throw!('{message: "bar"}') do |e|
28
+ e.message.should == "bar"
29
+ end
30
+ end
31
+
32
+ it "captures a thrown value as the message" do
33
+ throw!('"BOOM!"') do |e|
34
+ e.message.should == "BOOM!"
35
+ end
36
+ throw!('6') do |e|
37
+ e.message.should == '6'
38
+ end
39
+ end
40
+
41
+ it "has a reference to the root javascript cause" do
42
+ throw!('"I am a String"') do |e|
43
+ e.should_not be_in_ruby
44
+ e.should be_in_javascript
45
+ e.value['message'].should == "I am a String"
46
+ end
47
+ end
48
+
49
+ it "has a reference to the root ruby cause if one exists" do
50
+ StandardError.new("BOOM!").tap do |bomb|
51
+ @cxt['boom'] = lambda do
52
+ raise bomb
53
+ end
54
+ lambda {
55
+ @cxt.eval('boom()', 'boom.js')
56
+ }.should(raise_error do |raised|
57
+ raised.should be_in_ruby
58
+ raised.should_not be_in_javascript
59
+ raised.root_cause.should be(bomb)
60
+ end)
61
+ end
62
+ end
63
+
64
+ describe "backtrace" do
65
+ it "is mixed with ruby and javascript" do
66
+ throw! do |e|
67
+ backtrace = e.backtrace.reject { |l| /kernel\// =~ l }
68
+ backtrace.first.should eql "at three.js:1:7"
69
+ backtrace[1].should match(/error_spec.rb/)
70
+ backtrace[2].should eql "at two.js:1:1"
71
+ backtrace[3].should match(/error_spec.rb/)
72
+ backtrace[4].should eql "at one.js:1:1"
73
+ end
74
+ end
75
+
76
+ it "can be set to show only ruby frames" do
77
+ throw! do |e|
78
+ e.backtrace(:ruby).each do |frame|
79
+ frame.should =~ /(\.rb|):\d+/
80
+ end
81
+ end
82
+ end
83
+
84
+ it "can be set to show only javascript frames" do
85
+ throw! do |e|
86
+ e.backtrace(:javascript).each do |frame|
87
+ frame.should =~ /\.js:\d:\d/
88
+ end
89
+ end
90
+ end
91
+
92
+ it "includes a mystery marker when the original frame is unavailable because what got thrown wasn't an error" do
93
+ throw!("6") do |e|
94
+ e.backtrace.first.should == 'at three.js:1:1'
95
+ end
96
+ end
97
+
98
+ it "has a source name and line number when there is a javascript SyntaxError" do
99
+ lambda do
100
+ @cxt.eval(<<-INVALID, 'source.js')
101
+ "this line is okay";
102
+ "this line has a syntax error because it ends with a colon":
103
+ "this line is also okay";
104
+ "how do I find out that line 2 has the syntax error?";
105
+ INVALID
106
+ end.should raise_error(V8::JSError) {|error|
107
+ error.message.should eql 'Unexpected token : at source.js:2:61'
108
+ }
109
+ end
110
+
111
+ it "can start with ruby at the bottom" do
112
+ @cxt['boom'] = lambda do
113
+ raise StandardError, "Bif!"
114
+ end
115
+ lambda {
116
+ @cxt.eval('boom()', "boom.js")
117
+ }.should(raise_error {|e|
118
+ backtrace = e.backtrace.reject { |l| /kernel\// =~ l }
119
+ backtrace.first.should =~ /error_spec\.rb/
120
+ backtrace[1].should =~ /boom.js/
121
+ })
122
+ end
123
+ end
124
+
125
+
126
+ def throw!(js = "new Error('BOOM!')", &block)
127
+ @cxt['three'] = lambda do
128
+ @cxt.eval("throw #{js}", 'three.js')
129
+ end
130
+ lambda do
131
+ @cxt['one'].call()
132
+ end.should(raise_error(V8::JSError, &block))
133
+ end
134
+ end
135
+
136
+
137
+ # describe V8::Error do
138
+ # describe "A ruby exception thrown inside JavaScript" do
139
+ # before do
140
+ # @error = StandardError.new('potato')
141
+ # begin
142
+ # V8::Context.new do |cxt|
143
+ # cxt['one'] = lambda do
144
+ # cxt.eval('two()', 'one.js')
145
+ # end
146
+ # cxt['two'] = lambda do
147
+ # cxt.eval('three()', 'two.js')
148
+ # end
149
+ # cxt['three'] = lambda do
150
+ # raise @error
151
+ # end
152
+ # cxt.eval('one()')
153
+ # end
154
+ # rescue StandardError => e
155
+ # @thrown = e
156
+ # end
157
+ # end
158
+ # it "is raised up through the call stack" do
159
+ # @thrown.should be(@error)
160
+ # end
161
+ #
162
+ # it "shows both the javascript and the ruby callframes" do
163
+ # puts @error.backtrace.join('<br/>')
164
+ # end
165
+ #
166
+ # end
167
+ # end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe V8::Function do
4
+ it "uses the global context if it is invoked with nil as the context" do
5
+ @cxt = V8::Context.new
6
+ @cxt['foo'] = 'bar'
7
+ @cxt.eval('(function() {return this.foo})').methodcall(nil).should eql 'bar'
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe V8::Object do
4
+ before do
5
+ @object = V8::Context.new.eval('({foo: "bar", baz: "bang", qux: "qux1"})')
6
+ end
7
+
8
+ it "can list all keys" do
9
+ @object.keys.sort.should eql %w(baz foo qux)
10
+ end
11
+
12
+ it "can list all values" do
13
+ @object.values.sort.should eql %w(bang bar qux1)
14
+ end
15
+ end
data/thefrontside.png ADDED
Binary file
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/v8/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Charles Lowell"]
6
+ gem.email = ["javascript-and-friends@googlegroups.com"]
7
+ gem.summary = "Embed the V8 JavaScript interpreter into Ruby"
8
+ gem.description = "Call JavaScript code and manipulate JavaScript objects from Ruby. Call Ruby code and manipulate Ruby objects from JavaScript."
9
+ gem.homepage = "http://github.com/sotownsend/therubyracer"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "therubyracer-xcode"
15
+ gem.extensions = ["ext/v8/extconf.rb"]
16
+ gem.require_paths = ["lib", "ext"]
17
+ gem.version = V8::VERSION
18
+ gem.license = 'MIT'
19
+
20
+ gem.add_dependency 'ref'
21
+ gem.add_dependency 'libv8', '~> 4.5.95.5'
22
+ end
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: therubyracer-xcode
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.12.2
5
+ platform: ruby
6
+ authors:
7
+ - Charles Lowell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ref
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: libv8
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 4.5.95.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 4.5.95.5
41
+ description: Call JavaScript code and manipulate JavaScript objects from Ruby. Call
42
+ Ruby code and manipulate Ruby objects from JavaScript.
43
+ email:
44
+ - javascript-and-friends@googlegroups.com
45
+ executables: []
46
+ extensions:
47
+ - ext/v8/extconf.rb
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".gitignore"
51
+ - ".travis.yml"
52
+ - Changelog.md
53
+ - Gemfile
54
+ - README.md
55
+ - Rakefile
56
+ - benchmarks.rb
57
+ - ext/v8/accessor.cc
58
+ - ext/v8/array.cc
59
+ - ext/v8/backref.cc
60
+ - ext/v8/constants.cc
61
+ - ext/v8/constraints.cc
62
+ - ext/v8/context.cc
63
+ - ext/v8/date.cc
64
+ - ext/v8/exception.cc
65
+ - ext/v8/extconf.rb
66
+ - ext/v8/external.cc
67
+ - ext/v8/function.cc
68
+ - ext/v8/gc.cc
69
+ - ext/v8/handles.cc
70
+ - ext/v8/heap.cc
71
+ - ext/v8/init.cc
72
+ - ext/v8/invocation.cc
73
+ - ext/v8/locker.cc
74
+ - ext/v8/message.cc
75
+ - ext/v8/object.cc
76
+ - ext/v8/primitive.cc
77
+ - ext/v8/rr.cc
78
+ - ext/v8/rr.h
79
+ - ext/v8/script.cc
80
+ - ext/v8/signature.cc
81
+ - ext/v8/stack.cc
82
+ - ext/v8/string.cc
83
+ - ext/v8/template.cc
84
+ - ext/v8/trycatch.cc
85
+ - ext/v8/v8.cc
86
+ - ext/v8/value.cc
87
+ - lib/therubyracer.rb
88
+ - lib/v8.rb
89
+ - lib/v8/access.rb
90
+ - lib/v8/access/indices.rb
91
+ - lib/v8/access/invocation.rb
92
+ - lib/v8/access/names.rb
93
+ - lib/v8/array.rb
94
+ - lib/v8/context.rb
95
+ - lib/v8/conversion.rb
96
+ - lib/v8/conversion/array.rb
97
+ - lib/v8/conversion/class.rb
98
+ - lib/v8/conversion/code.rb
99
+ - lib/v8/conversion/fixnum.rb
100
+ - lib/v8/conversion/fundamental.rb
101
+ - lib/v8/conversion/hash.rb
102
+ - lib/v8/conversion/indentity.rb
103
+ - lib/v8/conversion/method.rb
104
+ - lib/v8/conversion/object.rb
105
+ - lib/v8/conversion/primitive.rb
106
+ - lib/v8/conversion/proc.rb
107
+ - lib/v8/conversion/reference.rb
108
+ - lib/v8/conversion/string.rb
109
+ - lib/v8/conversion/symbol.rb
110
+ - lib/v8/conversion/time.rb
111
+ - lib/v8/error.rb
112
+ - lib/v8/function.rb
113
+ - lib/v8/object.rb
114
+ - lib/v8/stack.rb
115
+ - lib/v8/version.rb
116
+ - lib/v8/weak.rb
117
+ - spec/c/array_spec.rb
118
+ - spec/c/constants_spec.rb
119
+ - spec/c/exception_spec.rb
120
+ - spec/c/external_spec.rb
121
+ - spec/c/function_spec.rb
122
+ - spec/c/handles_spec.rb
123
+ - spec/c/locker_spec.rb
124
+ - spec/c/object_spec.rb
125
+ - spec/c/script_spec.rb
126
+ - spec/c/string_spec.rb
127
+ - spec/c/template_spec.rb
128
+ - spec/c/trycatch_spec.rb
129
+ - spec/mem/blunt_spec.rb
130
+ - spec/redjs_spec.rb
131
+ - spec/spec_helper.rb
132
+ - spec/threading_spec.rb
133
+ - spec/v8/context_spec.rb
134
+ - spec/v8/conversion_spec.rb
135
+ - spec/v8/error_spec.rb
136
+ - spec/v8/function_spec.rb
137
+ - spec/v8/object_spec.rb
138
+ - thefrontside.png
139
+ - therubyracer.gemspec
140
+ homepage: http://github.com/sotownsend/therubyracer
141
+ licenses:
142
+ - MIT
143
+ metadata: {}
144
+ post_install_message:
145
+ rdoc_options: []
146
+ require_paths:
147
+ - lib
148
+ - ext
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 2.6.1
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: Embed the V8 JavaScript interpreter into Ruby
165
+ test_files:
166
+ - spec/c/array_spec.rb
167
+ - spec/c/constants_spec.rb
168
+ - spec/c/exception_spec.rb
169
+ - spec/c/external_spec.rb
170
+ - spec/c/function_spec.rb
171
+ - spec/c/handles_spec.rb
172
+ - spec/c/locker_spec.rb
173
+ - spec/c/object_spec.rb
174
+ - spec/c/script_spec.rb
175
+ - spec/c/string_spec.rb
176
+ - spec/c/template_spec.rb
177
+ - spec/c/trycatch_spec.rb
178
+ - spec/mem/blunt_spec.rb
179
+ - spec/redjs_spec.rb
180
+ - spec/spec_helper.rb
181
+ - spec/threading_spec.rb
182
+ - spec/v8/context_spec.rb
183
+ - spec/v8/conversion_spec.rb
184
+ - spec/v8/error_spec.rb
185
+ - spec/v8/function_spec.rb
186
+ - spec/v8/object_spec.rb