mirror of
https://github.com/rubyjs/therubyracer
synced 2023-03-27 23:21:42 -04:00
81 lines
2.2 KiB
C++
81 lines
2.2 KiB
C++
#include "v8_callbacks.h"
|
|
#include "rr.h"
|
|
|
|
using namespace v8;
|
|
|
|
|
|
namespace {
|
|
VALUE ArgumentsClass;
|
|
VALUE AccessorInfoClass;
|
|
|
|
VALUE _Data(VALUE self) {
|
|
return rb_iv_get(self, "data");
|
|
}
|
|
|
|
namespace Accessor {
|
|
AccessorInfo *info(VALUE value) {
|
|
AccessorInfo* i = 0;
|
|
Data_Get_Struct(value, class AccessorInfo, i);
|
|
return i;
|
|
}
|
|
VALUE This(VALUE self) {
|
|
return rr_v82rb(info(self)->This());
|
|
}
|
|
VALUE Holder(VALUE self) {
|
|
return rr_v82rb(info(self)->Holder());
|
|
}
|
|
}
|
|
|
|
namespace Args {
|
|
Arguments* args(VALUE value) {
|
|
Arguments *arguments = 0;
|
|
Data_Get_Struct(value, class Arguments, arguments);
|
|
return arguments;
|
|
}
|
|
VALUE This(VALUE self) {
|
|
return rr_v82rb(args(self)->This());
|
|
}
|
|
|
|
VALUE Holder(VALUE self) {
|
|
return rr_v82rb(args(self)->Holder());
|
|
}
|
|
|
|
VALUE Length(VALUE self) {
|
|
return rr_v82rb(args(self)->Length());
|
|
}
|
|
VALUE Get(VALUE self, VALUE index) {
|
|
int i = NUM2INT(index);
|
|
return rr_v82rb((*args(self))[i]);
|
|
}
|
|
VALUE Callee(VALUE self) {
|
|
return rr_v82rb(args(self)->Callee());
|
|
}
|
|
VALUE IsConstructCall(VALUE self) {
|
|
return rr_v82rb(args(self)->IsConstructCall());
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void rr_init_v8_callbacks() {
|
|
AccessorInfoClass = rr_define_class("AccessorInfo");
|
|
rr_define_method(AccessorInfoClass, "This", Accessor::This, 0);
|
|
rr_define_method(AccessorInfoClass, "Holder", Accessor::Holder, 0);
|
|
rr_define_method(AccessorInfoClass, "Data", _Data, 0);
|
|
|
|
ArgumentsClass = rr_define_class("Arguments");
|
|
rr_define_method(ArgumentsClass, "This", Args::This, 0);
|
|
rr_define_method(ArgumentsClass, "Holder", Args::Holder, 0);
|
|
rr_define_method(ArgumentsClass, "Data", _Data, 0);
|
|
rr_define_method(ArgumentsClass, "Length", Args::Length, 0);
|
|
rr_define_method(ArgumentsClass, "Callee", Args::Callee, 0);
|
|
rr_define_method(ArgumentsClass, "IsConstructCall", Args::IsConstructCall, 0);
|
|
rr_define_method(ArgumentsClass, "[]", Args::Get, 1);
|
|
}
|
|
|
|
VALUE rr_v82rb(const AccessorInfo& info) {
|
|
return Data_Wrap_Struct(AccessorInfoClass, 0, 0, (void*)&info);
|
|
}
|
|
VALUE rr_v82rb(const Arguments& arguments) {
|
|
return Data_Wrap_Struct(ArgumentsClass, 0, 0, (void*)&arguments);
|
|
}
|