therubyracer-freebsd 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +13 -0
- data/.rspec +1 -0
- data/.travis.yml +8 -0
- data/.yardopts +1 -0
- data/Changelog.md +231 -0
- data/Gemfile +3 -0
- data/README.md +167 -0
- data/Rakefile +26 -0
- data/bin/therubyracer +11 -0
- data/ext/v8/extconf.rb +26 -0
- data/ext/v8/rr.cpp +189 -0
- data/ext/v8/rr.h +41 -0
- data/ext/v8/v8.cpp +48 -0
- data/ext/v8/v8_array.cpp +48 -0
- data/ext/v8/v8_array.h +8 -0
- data/ext/v8/v8_callbacks.cpp +81 -0
- data/ext/v8/v8_callbacks.h +8 -0
- data/ext/v8/v8_context.cpp +92 -0
- data/ext/v8/v8_context.h +6 -0
- data/ext/v8/v8_date.cpp +40 -0
- data/ext/v8/v8_date.h +6 -0
- data/ext/v8/v8_debug.cpp +17 -0
- data/ext/v8/v8_debug.h +6 -0
- data/ext/v8/v8_exception.cpp +133 -0
- data/ext/v8/v8_exception.h +11 -0
- data/ext/v8/v8_external.cpp +70 -0
- data/ext/v8/v8_external.h +8 -0
- data/ext/v8/v8_function.cpp +69 -0
- data/ext/v8/v8_function.h +11 -0
- data/ext/v8/v8_handle.cpp +186 -0
- data/ext/v8/v8_handle.h +48 -0
- data/ext/v8/v8_locker.cpp +139 -0
- data/ext/v8/v8_locker.h +6 -0
- data/ext/v8/v8_message.cpp +67 -0
- data/ext/v8/v8_message.h +10 -0
- data/ext/v8/v8_object.cpp +122 -0
- data/ext/v8/v8_object.h +10 -0
- data/ext/v8/v8_script.cpp +36 -0
- data/ext/v8/v8_script.h +8 -0
- data/ext/v8/v8_string.cpp +52 -0
- data/ext/v8/v8_string.h +9 -0
- data/ext/v8/v8_template.cpp +344 -0
- data/ext/v8/v8_template.h +8 -0
- data/ext/v8/v8_try_catch.cpp +70 -0
- data/ext/v8/v8_try_catch.h +5 -0
- data/ext/v8/v8_v8.cpp +34 -0
- data/ext/v8/v8_v8.h +6 -0
- data/ext/v8/v8_value.cpp +175 -0
- data/ext/v8/v8_value.h +10 -0
- data/ext/v8/v8_weakref.cpp +61 -0
- data/ext/v8/v8_weakref.h +29 -0
- data/lib/v8.rb +23 -0
- data/lib/v8/access.rb +92 -0
- data/lib/v8/array.rb +17 -0
- data/lib/v8/c/locker.rb +18 -0
- data/lib/v8/cli.rb +133 -0
- data/lib/v8/context.rb +111 -0
- data/lib/v8/error.rb +130 -0
- data/lib/v8/function.rb +44 -0
- data/lib/v8/object.rb +69 -0
- data/lib/v8/portal.rb +86 -0
- data/lib/v8/portal/caller.rb +37 -0
- data/lib/v8/portal/constructor.rb +98 -0
- data/lib/v8/portal/function.rb +63 -0
- data/lib/v8/portal/interceptors.rb +152 -0
- data/lib/v8/portal/proxies.rb +151 -0
- data/lib/v8/portal/templates.rb +73 -0
- data/lib/v8/stack.rb +66 -0
- data/lib/v8/tap.rb +9 -0
- data/lib/v8/version.rb +3 -0
- data/spec/ext/array_spec.rb +15 -0
- data/spec/ext/cxt_spec.rb +57 -0
- data/spec/ext/ext_spec_helper.rb +27 -0
- data/spec/ext/func_spec.rb +64 -0
- data/spec/ext/object_spec.rb +10 -0
- data/spec/ext/string_spec.rb +11 -0
- data/spec/ext/try_catch_spec.rb +60 -0
- data/spec/redjs_spec.rb +9 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/v8/error_spec.rb +131 -0
- data/spec/v8/portal/proxies_spec.rb +106 -0
- data/specmem/handle_memspec.rb +41 -0
- data/specmem/object_memspec.rb +14 -0
- data/specmem/proxies_memspec.rb +49 -0
- data/specmem/spec_helper.rb +24 -0
- data/specthread/spec_helper.rb +2 -0
- data/specthread/threading_spec.rb +13 -0
- data/thefrontside.png +0 -0
- data/therubyracer.gemspec +27 -0
- metadata +183 -0
data/bin/therubyracer
ADDED
data/ext/v8/extconf.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
require 'set'
|
3
|
+
begin
|
4
|
+
require 'libv8'
|
5
|
+
rescue LoadError
|
6
|
+
require 'rubygems'
|
7
|
+
require 'libv8'
|
8
|
+
end
|
9
|
+
|
10
|
+
have_library('objc') if RUBY_PLATFORM =~ /darwin/
|
11
|
+
|
12
|
+
#we have to manually prepend the libv8 include path to INCFLAGS
|
13
|
+
#since find_header() does not actually work as advertized.
|
14
|
+
#see https://github.com/cowboyd/therubyracer/issues/91
|
15
|
+
$INCFLAGS.insert 0, "-I#{Libv8.include_path} "
|
16
|
+
|
17
|
+
$CPPFLAGS += " -Wall" unless $CPPFLAGS.split.include? "-Wall"
|
18
|
+
$CPPFLAGS += " -g" unless $CPPFLAGS.split.include? "-g"
|
19
|
+
$CPPFLAGS += " -rdynamic" unless $CPPFLAGS.split.include? "-rdynamic"
|
20
|
+
|
21
|
+
$LDFLAGS.insert 0, "#{Libv8.library_path}/libv8.#{$LIBEXT} "
|
22
|
+
$LIBS << ' -lpthread'
|
23
|
+
|
24
|
+
CONFIG['LDSHARED'] = '$(CXX) -shared' unless RUBY_PLATFORM =~ /darwin/
|
25
|
+
|
26
|
+
create_makefile('v8')
|
data/ext/v8/rr.cpp
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
#include "rr.h"
|
2
|
+
#include "v8_context.h"
|
3
|
+
#include "v8_handle.h"
|
4
|
+
#include "v8_value.h"
|
5
|
+
#include "v8_object.h"
|
6
|
+
#include "v8_function.h"
|
7
|
+
#include "v8_array.h"
|
8
|
+
#include "v8_string.h"
|
9
|
+
#include "v8_date.h"
|
10
|
+
#include "v8_message.h"
|
11
|
+
#include "v8_external.h"
|
12
|
+
#include "v8_exception.h"
|
13
|
+
|
14
|
+
using namespace v8;
|
15
|
+
|
16
|
+
VALUE rr_define_class(const char *name, VALUE superclass) {
|
17
|
+
VALUE V8 = rb_define_module("V8");
|
18
|
+
VALUE V8_C = rb_define_module_under(V8, "C");
|
19
|
+
VALUE klass = rb_define_class_under(V8_C, name, superclass);
|
20
|
+
rb_funcall(klass, rb_intern("private_class_method"), 1, rb_str_new2("new"));
|
21
|
+
return klass;
|
22
|
+
}
|
23
|
+
|
24
|
+
VALUE rr_define_module(const char *name) {
|
25
|
+
VALUE V8 = rb_define_module("V8");
|
26
|
+
VALUE V8_C = rb_define_module_under(V8, "C");
|
27
|
+
return rb_define_module_under(V8_C, name);
|
28
|
+
}
|
29
|
+
|
30
|
+
VALUE rr_define_const(const char *name, VALUE value) {
|
31
|
+
VALUE V8 = rb_define_module("V8");
|
32
|
+
VALUE V8_C = rb_define_module_under(V8, "C");
|
33
|
+
rb_define_const(V8_C, name, value);
|
34
|
+
return value;
|
35
|
+
}
|
36
|
+
|
37
|
+
VALUE rr_const_get(const char *name) {
|
38
|
+
VALUE V8 = rb_define_module("V8");
|
39
|
+
VALUE V8_C = rb_define_module_under(V8, "C");
|
40
|
+
return rb_const_get(V8_C, rb_intern(name));
|
41
|
+
}
|
42
|
+
|
43
|
+
VALUE rr_define_finalizer(VALUE object, void* finalizer, VALUE data) {
|
44
|
+
VALUE finalizer_proc = rb_proc_new((VALUE (*)(...))finalizer, data);
|
45
|
+
rb_iv_set(finalizer_proc, "data", data);
|
46
|
+
VALUE ospace = rb_const_get(rb_cObject, rb_intern("ObjectSpace"));
|
47
|
+
rb_funcall(ospace, rb_intern("define_finalizer"), 2, object, finalizer_proc);
|
48
|
+
}
|
49
|
+
|
50
|
+
VALUE rr_v82rb(Handle<Value> value) {
|
51
|
+
if (value.IsEmpty()) {
|
52
|
+
return rr_v8_value_empty();
|
53
|
+
}
|
54
|
+
if (value->IsUndefined() || value->IsNull()) {
|
55
|
+
return Qnil;
|
56
|
+
}
|
57
|
+
if (value->IsExternal()) {
|
58
|
+
return rr_reflect_v8_external(value);
|
59
|
+
}
|
60
|
+
if (value->IsUint32()) {
|
61
|
+
return UINT2NUM(value->Uint32Value());
|
62
|
+
}
|
63
|
+
if (value->IsInt32()) {
|
64
|
+
return INT2FIX(value->Int32Value());
|
65
|
+
}
|
66
|
+
if (value->IsBoolean()) {
|
67
|
+
return value->BooleanValue() ? Qtrue : Qfalse;
|
68
|
+
}
|
69
|
+
if (value->IsNumber()) {
|
70
|
+
return rb_float_new(value->NumberValue());
|
71
|
+
}
|
72
|
+
if (value->IsString()) {
|
73
|
+
return rr_reflect_v8_string(value);
|
74
|
+
}
|
75
|
+
if (value->IsFunction()) {
|
76
|
+
return rr_reflect_v8_function(value);
|
77
|
+
}
|
78
|
+
if (value->IsArray()) {
|
79
|
+
return rr_reflect_v8_array(value);
|
80
|
+
}
|
81
|
+
if (value->IsDate()) {
|
82
|
+
return rr_reflect_v8_date(value);
|
83
|
+
}
|
84
|
+
if (value->IsObject()) {
|
85
|
+
return rr_reflect_v8_object(value);
|
86
|
+
}
|
87
|
+
return rr_wrap_v8_value(value);
|
88
|
+
}
|
89
|
+
|
90
|
+
VALUE rr_v82rb(Handle<Message> value) {
|
91
|
+
return rr_reflect_v8_message(value);
|
92
|
+
}
|
93
|
+
VALUE rr_v82rb(Handle<StackTrace> value) {
|
94
|
+
return rr_reflect_v8_stacktrace(value);
|
95
|
+
}
|
96
|
+
VALUE rr_v82rb(Handle<StackFrame> value) {
|
97
|
+
return rr_reflect_v8_stackframe(value);
|
98
|
+
}
|
99
|
+
|
100
|
+
VALUE rr_v82rb(Handle<Boolean> value) {
|
101
|
+
return rr_v82rb((Handle<Value>)value);
|
102
|
+
}
|
103
|
+
VALUE rr_v82rb(Handle<Number> value) {
|
104
|
+
return rr_v82rb((Handle<Value>)value);
|
105
|
+
}
|
106
|
+
VALUE rr_v82rb(Handle<String> value) {
|
107
|
+
return rr_v82rb((Handle<Value>)value);
|
108
|
+
}
|
109
|
+
VALUE rr_v82rb(Handle<Object> value) {
|
110
|
+
return rr_v82rb((Handle<Value>)value);
|
111
|
+
}
|
112
|
+
VALUE rr_v82rb(Handle<Array> value) {
|
113
|
+
return rr_v82rb((Handle<Value>)value);
|
114
|
+
}
|
115
|
+
VALUE rr_v82rb(v8::Handle<v8::Function> value) {
|
116
|
+
return rr_v82rb((Handle<Value>)value);
|
117
|
+
}
|
118
|
+
VALUE rr_v82rb(Handle<Integer> value) {
|
119
|
+
return rr_v82rb((Handle<Value>)value);
|
120
|
+
}
|
121
|
+
VALUE rr_v82rb(Handle<Uint32> value) {
|
122
|
+
return rr_v82rb((Handle<Value>)value);
|
123
|
+
}
|
124
|
+
VALUE rr_v82rb(Handle<Int32> value) {
|
125
|
+
return rr_v82rb((Handle<Value>)value);
|
126
|
+
}
|
127
|
+
VALUE rr_v82rb(bool value) {
|
128
|
+
return value ? Qtrue : Qfalse;
|
129
|
+
}
|
130
|
+
VALUE rr_v82rb(double value) {
|
131
|
+
return rb_float_new(value);
|
132
|
+
}
|
133
|
+
VALUE rr_v82rb(int64_t value) {
|
134
|
+
return LONG2NUM(value);
|
135
|
+
}
|
136
|
+
VALUE rr_v82rb(uint32_t value) {
|
137
|
+
return UINT2NUM(value);
|
138
|
+
}
|
139
|
+
VALUE rr_v82rb(int32_t value) {
|
140
|
+
return INT2FIX(value);
|
141
|
+
}
|
142
|
+
|
143
|
+
Handle<Value> rr_rb2v8(VALUE value) {
|
144
|
+
switch (TYPE(value)) {
|
145
|
+
case T_FIXNUM:
|
146
|
+
// TODO: use this conversion if value will fit in 32 bits.
|
147
|
+
// return Integer::New(FIX2LONG(value));
|
148
|
+
case T_FLOAT:
|
149
|
+
return Number::New(NUM2DBL(value));
|
150
|
+
case T_STRING:
|
151
|
+
return String::New(RSTRING_PTR(value), RSTRING_LEN(value));
|
152
|
+
case T_NIL:
|
153
|
+
return Null();
|
154
|
+
case T_TRUE:
|
155
|
+
return True();
|
156
|
+
case T_FALSE:
|
157
|
+
return False();
|
158
|
+
case T_DATA:
|
159
|
+
return rr_v8_handle<Value>(value);
|
160
|
+
case T_OBJECT:
|
161
|
+
case T_CLASS:
|
162
|
+
case T_ICLASS:
|
163
|
+
case T_MODULE:
|
164
|
+
case T_REGEXP:
|
165
|
+
case T_MATCH:
|
166
|
+
case T_ARRAY:
|
167
|
+
case T_HASH:
|
168
|
+
case T_STRUCT:
|
169
|
+
case T_BIGNUM:
|
170
|
+
case T_FILE:
|
171
|
+
case T_SYMBOL:
|
172
|
+
// case T_BLKTAG: (not in 1.9)
|
173
|
+
case T_UNDEF:
|
174
|
+
// case T_VARMAP: (not in 1.9)
|
175
|
+
// case T_SCOPE: (not in 1.9)
|
176
|
+
case T_NODE:
|
177
|
+
default:
|
178
|
+
rb_warn("unknown conversion to V8 for: %s", RSTRING_PTR(rb_inspect(value)));
|
179
|
+
return String::New("Undefined Conversion");
|
180
|
+
}
|
181
|
+
|
182
|
+
return Undefined();
|
183
|
+
}
|
184
|
+
// VALUE rr_v82rb(v8::ScriptData *data) {
|
185
|
+
// return rr_thunk(rr_wrap_script_data(data));
|
186
|
+
// }
|
187
|
+
|
188
|
+
|
189
|
+
|
data/ext/v8/rr.h
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#ifndef _THE_RUBY_RACER_
|
2
|
+
#define _THE_RUBY_RACER_
|
3
|
+
|
4
|
+
#include <ruby.h>
|
5
|
+
#include <v8.h>
|
6
|
+
|
7
|
+
#define rr_define_method(klass, name, impl, argc) rb_define_method(klass, name, (VALUE(*)(...))impl, argc)
|
8
|
+
#define rr_define_singleton_method(object, name, impl, argc) rb_define_singleton_method(object, name, (VALUE(*)(...))impl, argc)
|
9
|
+
|
10
|
+
VALUE rr_define_class(const char *name, VALUE superclass = rb_cObject);
|
11
|
+
VALUE rr_define_module(const char *name);
|
12
|
+
VALUE rr_define_const(const char *name, VALUE value);
|
13
|
+
VALUE rr_const_get(const char *name);
|
14
|
+
VALUE rr_define_finalizer(VALUE object, void* finalizer, VALUE data);
|
15
|
+
|
16
|
+
extern "C" VALUE rb_proc_new(VALUE (*)(ANYARGS/* VALUE yieldarg[, VALUE procarg] */), VALUE);
|
17
|
+
|
18
|
+
|
19
|
+
VALUE rr_v82rb(v8::Handle<v8::Value> value);
|
20
|
+
VALUE rr_v82rb(v8::Handle<v8::Boolean> value);
|
21
|
+
VALUE rr_v82rb(v8::Handle<v8::Number> value);
|
22
|
+
VALUE rr_v82rb(v8::Handle<v8::String> value);
|
23
|
+
VALUE rr_v82rb(v8::Handle<v8::Object> value);
|
24
|
+
VALUE rr_v82rb(v8::Handle<v8::Array> value);
|
25
|
+
VALUE rr_v82rb(v8::Handle<v8::Function> value);
|
26
|
+
VALUE rr_v82rb(v8::Handle<v8::Integer> value);
|
27
|
+
VALUE rr_v82rb(v8::Handle<v8::Uint32> value);
|
28
|
+
VALUE rr_v82rb(v8::Handle<v8::Int32> value);
|
29
|
+
VALUE rr_v82rb(v8::Handle<v8::Message> value);
|
30
|
+
VALUE rr_v82rb(v8::Handle<v8::StackTrace> value);
|
31
|
+
VALUE rr_v82rb(v8::Handle<v8::StackFrame> value);
|
32
|
+
|
33
|
+
VALUE rr_v82rb(bool value);
|
34
|
+
VALUE rr_v82rb(double value);
|
35
|
+
VALUE rr_v82rb(int64_t value);
|
36
|
+
VALUE rr_v82rb(uint32_t value);
|
37
|
+
VALUE rr_v82rb(int32_t value);
|
38
|
+
|
39
|
+
v8::Handle<v8::Value> rr_rb2v8(VALUE value);
|
40
|
+
|
41
|
+
#endif
|
data/ext/v8/v8.cpp
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
#include "v8_handle.h"
|
2
|
+
#include "v8_context.h"
|
3
|
+
#include "v8_value.h"
|
4
|
+
#include "v8_string.h"
|
5
|
+
#include "v8_object.h"
|
6
|
+
#include "v8_array.h"
|
7
|
+
#include "v8_message.h"
|
8
|
+
#include "v8_function.h"
|
9
|
+
#include "v8_date.h"
|
10
|
+
#include "v8_script.h"
|
11
|
+
#include "v8_template.h"
|
12
|
+
#include "v8_try_catch.h"
|
13
|
+
#include "v8_callbacks.h"
|
14
|
+
#include "v8_external.h"
|
15
|
+
#include "v8_exception.h"
|
16
|
+
#include "v8_locker.h"
|
17
|
+
#include "v8_debug.h"
|
18
|
+
#include "v8_v8.h"
|
19
|
+
|
20
|
+
#include <stdio.h>
|
21
|
+
|
22
|
+
extern "C" {
|
23
|
+
void Init_v8();
|
24
|
+
}
|
25
|
+
|
26
|
+
extern "C" {
|
27
|
+
void Init_v8() {
|
28
|
+
v8::Locker locker;
|
29
|
+
rr_init_handle();
|
30
|
+
rr_init_context();
|
31
|
+
rr_init_value();
|
32
|
+
rr_init_string();
|
33
|
+
rr_init_script();
|
34
|
+
rr_init_template();
|
35
|
+
rr_init_object();
|
36
|
+
rr_init_function();
|
37
|
+
rr_init_v8_array();
|
38
|
+
rr_init_v8_date();
|
39
|
+
rr_init_message();
|
40
|
+
rr_init_v8_try_catch();
|
41
|
+
rr_init_v8_callbacks();
|
42
|
+
rr_init_v8_external();
|
43
|
+
rr_init_v8_exception();
|
44
|
+
rr_init_v8_locker();
|
45
|
+
rr_init_v8_debug();
|
46
|
+
rr_init_v8_v8();
|
47
|
+
}
|
48
|
+
}
|
data/ext/v8/v8_array.cpp
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
#include "v8_handle.h"
|
2
|
+
#include "v8_array.h"
|
3
|
+
#include "v8_object.h"
|
4
|
+
|
5
|
+
using namespace v8;
|
6
|
+
|
7
|
+
|
8
|
+
namespace {
|
9
|
+
|
10
|
+
VALUE ArrayClass;
|
11
|
+
|
12
|
+
Persistent<Array>& unwrap(VALUE self) {
|
13
|
+
return rr_v8_handle<Array>(self);
|
14
|
+
}
|
15
|
+
|
16
|
+
VALUE New(int argc, VALUE *argv, VALUE self) {
|
17
|
+
if (!Context::InContext()) {
|
18
|
+
rb_raise(rb_eScriptError, "must be in a context to call Array::New()");
|
19
|
+
return Qnil;
|
20
|
+
}
|
21
|
+
VALUE length;
|
22
|
+
rb_scan_args(argc, argv, "01", &length);
|
23
|
+
if (NIL_P(length)) {
|
24
|
+
length = INT2FIX(0);
|
25
|
+
}
|
26
|
+
HandleScope scope;
|
27
|
+
return rr_v8_handle_new(self, Array::New(NUM2INT(length)));
|
28
|
+
}
|
29
|
+
|
30
|
+
VALUE Length(VALUE self) {
|
31
|
+
return rr_v82rb(unwrap(self)->Length());
|
32
|
+
}
|
33
|
+
|
34
|
+
VALUE CloneElementAt(VALUE self, VALUE index) {
|
35
|
+
return rr_v82rb(unwrap(self)->CloneElementAt(NUM2UINT(index)));
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
void rr_init_v8_array() {
|
40
|
+
ArrayClass = rr_define_class("Array", rr_v8_object_class());
|
41
|
+
rr_define_singleton_method(ArrayClass, "New", New, -1);
|
42
|
+
rr_define_method(ArrayClass, "Length", Length, 0);
|
43
|
+
rr_define_method(ArrayClass, "CloneElementAt", CloneElementAt, 1);
|
44
|
+
}
|
45
|
+
|
46
|
+
VALUE rr_reflect_v8_array(Handle<Value> value) {
|
47
|
+
return rr_reflect_v8_object_as(value, ArrayClass);
|
48
|
+
}
|
data/ext/v8/v8_array.h
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
#include "v8_callbacks.h"
|
2
|
+
#include "rr.h"
|
3
|
+
|
4
|
+
using namespace v8;
|
5
|
+
|
6
|
+
|
7
|
+
namespace {
|
8
|
+
VALUE ArgumentsClass;
|
9
|
+
VALUE AccessorInfoClass;
|
10
|
+
|
11
|
+
VALUE _Data(VALUE self) {
|
12
|
+
return rb_iv_get(self, "data");
|
13
|
+
}
|
14
|
+
|
15
|
+
namespace Accessor {
|
16
|
+
AccessorInfo *info(VALUE value) {
|
17
|
+
AccessorInfo* i = 0;
|
18
|
+
Data_Get_Struct(value, class AccessorInfo, i);
|
19
|
+
return i;
|
20
|
+
}
|
21
|
+
VALUE This(VALUE self) {
|
22
|
+
return rr_v82rb(info(self)->This());
|
23
|
+
}
|
24
|
+
VALUE Holder(VALUE self) {
|
25
|
+
return rr_v82rb(info(self)->Holder());
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
namespace Args {
|
30
|
+
Arguments* args(VALUE value) {
|
31
|
+
Arguments *arguments = 0;
|
32
|
+
Data_Get_Struct(value, class Arguments, arguments);
|
33
|
+
return arguments;
|
34
|
+
}
|
35
|
+
VALUE This(VALUE self) {
|
36
|
+
return rr_v82rb(args(self)->This());
|
37
|
+
}
|
38
|
+
|
39
|
+
VALUE Holder(VALUE self) {
|
40
|
+
return rr_v82rb(args(self)->Holder());
|
41
|
+
}
|
42
|
+
|
43
|
+
VALUE Length(VALUE self) {
|
44
|
+
return rr_v82rb(args(self)->Length());
|
45
|
+
}
|
46
|
+
VALUE Get(VALUE self, VALUE index) {
|
47
|
+
int i = NUM2INT(index);
|
48
|
+
return rr_v82rb((*args(self))[i]);
|
49
|
+
}
|
50
|
+
VALUE Callee(VALUE self) {
|
51
|
+
return rr_v82rb(args(self)->Callee());
|
52
|
+
}
|
53
|
+
VALUE IsConstructCall(VALUE self) {
|
54
|
+
return rr_v82rb(args(self)->IsConstructCall());
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
}
|
59
|
+
|
60
|
+
void rr_init_v8_callbacks() {
|
61
|
+
AccessorInfoClass = rr_define_class("AccessorInfo");
|
62
|
+
rr_define_method(AccessorInfoClass, "This", Accessor::This, 0);
|
63
|
+
rr_define_method(AccessorInfoClass, "Holder", Accessor::Holder, 0);
|
64
|
+
rr_define_method(AccessorInfoClass, "Data", _Data, 0);
|
65
|
+
|
66
|
+
ArgumentsClass = rr_define_class("Arguments");
|
67
|
+
rr_define_method(ArgumentsClass, "This", Args::This, 0);
|
68
|
+
rr_define_method(ArgumentsClass, "Holder", Args::Holder, 0);
|
69
|
+
rr_define_method(ArgumentsClass, "Data", _Data, 0);
|
70
|
+
rr_define_method(ArgumentsClass, "Length", Args::Length, 0);
|
71
|
+
rr_define_method(ArgumentsClass, "Callee", Args::Callee, 0);
|
72
|
+
rr_define_method(ArgumentsClass, "IsConstructCall", Args::IsConstructCall, 0);
|
73
|
+
rr_define_method(ArgumentsClass, "[]", Args::Get, 1);
|
74
|
+
}
|
75
|
+
|
76
|
+
VALUE rr_v82rb(const AccessorInfo& info) {
|
77
|
+
return Data_Wrap_Struct(AccessorInfoClass, 0, 0, (void*)&info);
|
78
|
+
}
|
79
|
+
VALUE rr_v82rb(const Arguments& arguments) {
|
80
|
+
return Data_Wrap_Struct(ArgumentsClass, 0, 0, (void*)&arguments);
|
81
|
+
}
|