therubyracer 0.8.2 → 0.9.0beta1
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.
Potentially problematic release.
This version of therubyracer might be problematic. Click here for more details.
- data/Changelog.md +1 -1
- data/ext/v8/rr.cpp +14 -7
- data/ext/v8/rr.h +1 -0
- data/ext/v8/v8.cpp +27 -25
- data/ext/v8/v8_array.cpp +7 -9
- data/ext/v8/v8_callbacks.cpp +1 -1
- data/ext/v8/{v8_cxt.cpp → v8_context.cpp} +11 -11
- data/ext/v8/{v8_cxt.h → v8_context.h} +1 -1
- data/ext/v8/v8_date.cpp +6 -6
- data/ext/v8/v8_exception.cpp +10 -11
- data/ext/v8/v8_external.cpp +7 -24
- data/ext/v8/v8_external.h +0 -1
- data/ext/v8/{v8_func.cpp → v8_function.cpp} +14 -14
- data/ext/v8/{v8_func.h → v8_function.h} +1 -2
- data/ext/v8/v8_handle.cpp +119 -0
- data/ext/v8/v8_handle.h +27 -0
- data/ext/v8/{v8_msg.cpp → v8_message.cpp} +8 -9
- data/ext/v8/{v8_msg.h → v8_message.h} +1 -1
- data/ext/v8/{v8_obj.cpp → v8_object.cpp} +51 -29
- data/ext/v8/{v8_obj.h → v8_object.h} +3 -4
- data/ext/v8/v8_script.cpp +5 -5
- data/ext/v8/{v8_str.cpp → v8_string.cpp} +9 -11
- data/ext/v8/{v8_str.h → v8_string.h} +1 -1
- data/ext/v8/v8_template.cpp +113 -98
- data/ext/v8/v8_try_catch.cpp +1 -1
- data/ext/v8/v8_v8.cpp +7 -0
- data/ext/v8/v8_value.cpp +44 -36
- data/ext/v8/v8_value.h +2 -2
- data/ext/v8/v8_weakref.cpp +51 -0
- data/ext/v8/v8_weakref.h +30 -0
- data/lib/v8.rb +6 -1
- data/lib/v8/context.rb +13 -3
- data/lib/v8/error.rb +1 -1
- data/lib/v8/portal.rb +26 -277
- data/lib/v8/portal/caller.rb +36 -0
- data/lib/v8/portal/constructor.rb +98 -0
- data/lib/v8/portal/function.rb +48 -0
- data/lib/v8/portal/interceptors.rb +153 -0
- data/lib/v8/portal/proxies.rb +102 -0
- data/lib/v8/portal/templates.rb +73 -0
- data/lib/v8/version.rb +1 -1
- data/spec/ext/array_spec.rb +15 -0
- data/spec/ext/cxt_spec.rb +4 -4
- data/spec/ext/ext_spec_helper.rb +43 -0
- data/spec/ext/mem_spec.rb +42 -0
- data/spec/ext/object_spec.rb +22 -0
- data/spec/redjs/jsapi_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -1
- data/spec/v8/portal/proxies_spec.rb +189 -0
- metadata +38 -42
- data/ext/v8/v8_ref.cpp +0 -37
- data/ext/v8/v8_ref.h +0 -28
- data/lib/v8/portal/functions.rb +0 -45
data/ext/v8/v8_ref.cpp
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
#include <v8_ref.h>
|
2
|
-
#include "stdio.h"
|
3
|
-
using namespace v8;
|
4
|
-
|
5
|
-
v8_ref::v8_ref(Handle<void> object) : handle(Persistent<void>::New(object)) {
|
6
|
-
this->references = rb_hash_new();
|
7
|
-
}
|
8
|
-
|
9
|
-
v8_ref::~v8_ref() {
|
10
|
-
handle.Dispose();
|
11
|
-
}
|
12
|
-
|
13
|
-
void v8_ref::set(const char *name, VALUE ref) {
|
14
|
-
if (ref != 0 && RTEST(ref)) {
|
15
|
-
rb_hash_aset(this->references, rb_str_new2(name), ref);
|
16
|
-
}
|
17
|
-
}
|
18
|
-
|
19
|
-
namespace {
|
20
|
-
void gc_mark(v8_ref* ref) {
|
21
|
-
rb_gc_mark(ref->references);
|
22
|
-
}
|
23
|
-
|
24
|
-
void gc_free(v8_ref* ref) {
|
25
|
-
delete ref;
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
VALUE rr_v8_ref_create(VALUE rbclass, v8::Handle<void> handle) {
|
30
|
-
return Data_Wrap_Struct(rbclass, gc_mark, gc_free, new v8_ref(handle));
|
31
|
-
}
|
32
|
-
|
33
|
-
void rr_v8_ref_setref(VALUE handle, const char *name, VALUE newref) {
|
34
|
-
v8_ref *ref = 0;
|
35
|
-
Data_Get_Struct(handle, struct v8_ref, ref);
|
36
|
-
ref->set(name, newref);
|
37
|
-
}
|
data/ext/v8/v8_ref.h
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
#ifndef _RUBY_V8_REF_
|
2
|
-
#define _RUBY_V8_REF_
|
3
|
-
|
4
|
-
#include <v8.h>
|
5
|
-
#include "ruby.h"
|
6
|
-
|
7
|
-
//the v8_ref wraps a v8 handle so that ruby can hold a reference to it.
|
8
|
-
|
9
|
-
struct v8_ref {
|
10
|
-
//takes a handle object and adds a new persistent handle for
|
11
|
-
//the referenced object
|
12
|
-
v8_ref(v8::Handle<void> object);
|
13
|
-
virtual ~v8_ref();
|
14
|
-
void set(const char *name, VALUE ref);
|
15
|
-
v8::Persistent<void> handle;
|
16
|
-
VALUE references;
|
17
|
-
};
|
18
|
-
|
19
|
-
void rr_v8_ref_setref(VALUE handle, const char *name, VALUE ref);
|
20
|
-
VALUE rr_v8_ref_create(VALUE rbclass, v8::Handle<void> handle);
|
21
|
-
|
22
|
-
template <class T> v8::Local<T> V8_Ref_Get(VALUE object) {
|
23
|
-
v8_ref* ref = 0;
|
24
|
-
Data_Get_Struct(object, struct v8_ref, ref);
|
25
|
-
return (T *)*ref->handle;
|
26
|
-
}
|
27
|
-
|
28
|
-
#endif
|
data/lib/v8/portal/functions.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module V8
|
2
|
-
class Portal
|
3
|
-
class Functions
|
4
|
-
def initialize(portal)
|
5
|
-
@portal = portal
|
6
|
-
@procs, @methods = {},{}
|
7
|
-
end
|
8
|
-
|
9
|
-
def [](code)
|
10
|
-
self.send(code.class.name, code)
|
11
|
-
end
|
12
|
-
|
13
|
-
def Proc(p)
|
14
|
-
@procs[p] ||= begin
|
15
|
-
template = C::FunctionTemplate::New() do |arguments|
|
16
|
-
rbargs = []
|
17
|
-
for i in 0..arguments.Length() - 1
|
18
|
-
rbargs << @portal.rb(arguments[i])
|
19
|
-
end
|
20
|
-
@portal.rubycall(p, *rbargs)
|
21
|
-
end
|
22
|
-
template.GetFunction()
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def UnboundMethod(method)
|
27
|
-
@methods[method.to_s] ||= begin
|
28
|
-
template = C::FunctionTemplate::New() do |arguments|
|
29
|
-
rbargs = []
|
30
|
-
for i in 0..arguments.Length() - 1
|
31
|
-
rbargs << @portal.rb(arguments[i])
|
32
|
-
end
|
33
|
-
this = @portal.rb(arguments.This())
|
34
|
-
@portal.rubyprotect do
|
35
|
-
method.bind(this).call(*rbargs)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
template.GetFunction()
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
alias_method :Method, :Proc
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|