1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00
therubyracer/ext/v8/rr.cpp

166 lines
3.8 KiB
C++
Raw Normal View History

2010-05-08 13:58:43 -04:00
#include "rr.h"
#include "v8_cxt.h"
2010-05-11 13:41:07 -04:00
#include "v8_value.h"
2010-05-13 18:14:54 -04:00
#include "v8_obj.h"
#include "v8_func.h"
2010-05-17 07:39:29 -04:00
#include "v8_array.h"
2010-05-12 18:30:53 -04:00
#include "v8_str.h"
#include "v8_msg.h"
2010-05-11 13:41:07 -04:00
using namespace v8;
2010-05-08 13:58:43 -04:00
VALUE rr_define_class(const char *name, VALUE superclass) {
2010-05-08 13:58:43 -04:00
VALUE V8 = rb_define_module("V8");
VALUE V8_C = rb_define_module_under(V8, "C");
VALUE klass = rb_define_class_under(V8_C, name, superclass);
rb_funcall(klass, rb_intern("private_class_method"), 1, rb_str_new2("new"));
return klass;
}
2010-05-22 02:15:00 -04:00
VALUE rr_define_const(const char *name, VALUE value) {
VALUE V8 = rb_define_module("V8");
VALUE V8_C = rb_define_module_under(V8, "C");
rb_define_const(V8_C, name, value);
return value;
}
VALUE rr_str_to_perl_case(VALUE str) {
VALUE V8 = rb_define_module("V8");
VALUE to = rb_define_module_under(V8, "To");
return rb_funcall(to, rb_intern("perl_case"), 1, str);
}
VALUE rr_str_to_camel_case(VALUE str) {
VALUE V8 = rb_define_module("V8");
VALUE to = rb_define_module_under(V8, "To");
return rb_funcall(to, rb_intern("camel_case"), 1, str);
}
2010-05-11 13:41:07 -04:00
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(Handle<Value> value) {
2010-05-22 02:15:00 -04:00
if (value.IsEmpty()) {
return rr_cV8_C_Empty;
}
2010-05-18 13:50:59 -04:00
if (value.IsEmpty() || value->IsUndefined() || value->IsNull()) {
2010-05-12 18:30:53 -04:00
return Qnil;
}
if (value->IsUint32()) {
return UINT2NUM(value->Uint32Value());
}
if (value->IsInt32()) {
return INT2FIX(value->Int32Value());
}
if (value->IsBoolean()) {
return value->BooleanValue() ? Qtrue : Qfalse;
2010-05-12 18:30:53 -04:00
}
if (value->IsNumber()) {
return rb_float_new(value->NumberValue());
}
if (value->IsString()) {
return rr_reflect_v8_string(value);
}
if (value->IsFunction()) {
return rr_reflect_v8_function(value);
}
if (value->IsArray()) {
return rr_reflect_v8_array(value);
}
if (value->IsObject()) {
return rr_reflect_v8_object(value);
}
return rr_wrap_v8_value(value);
2010-05-11 13:41:07 -04:00
}
VALUE rr_v82rb(Handle<Context> value) {
return rr_reflect_v8_context(value);
}
VALUE rr_v82rb(Handle<Message> value) {
return rr_reflect_v8_message(value);
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(Handle<Boolean> value) {
return rr_v82rb((Handle<Value>)value);
2010-05-11 13:41:07 -04:00
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(Handle<Number> value) {
return rr_v82rb((Handle<Value>)value);
2010-05-11 13:41:07 -04:00
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(Handle<String> value) {
return rr_v82rb((Handle<Value>)value);
2010-05-11 13:41:07 -04:00
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(Handle<Object> value) {
return rr_v82rb((Handle<Value>)value);
2010-05-11 13:41:07 -04:00
}
2010-05-13 17:53:09 -04:00
VALUE rr_v82rb(v8::Handle<v8::Function> value) {
return rr_v82rb((Handle<Value>)value);
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(Handle<Integer> value) {
return rr_v82rb((Handle<Value>)value);
2010-05-11 13:41:07 -04:00
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(Handle<Uint32> value) {
return rr_v82rb((Handle<Value>)value);
2010-05-11 13:41:07 -04:00
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(Handle<Int32> value) {
return rr_v82rb((Handle<Value>)value);
2010-05-11 13:41:07 -04:00
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(bool value) {
2010-05-11 13:41:07 -04:00
return value ? Qtrue : Qfalse;
}
2010-05-12 18:30:53 -04:00
VALUE rr_v82rb(double value) {
return rb_float_new(value);
}
VALUE rr_v82rb(int64_t value) {
return INT2FIX(value);
}
VALUE rr_v82rb(uint32_t value) {
return UINT2NUM(value);
}
VALUE rr_v82rb(int32_t value) {
return INT2FIX(value);
}
2010-05-11 13:41:07 -04:00
2010-05-13 17:53:09 -04:00
Handle<Value> rr_rb2v8(VALUE value) {
switch (TYPE(value)) {
case T_FIXNUM:
return Integer::New(FIX2INT(value));
case T_FLOAT:
return Number::New(NUM2DBL(value));
case T_STRING:
return String::New(RSTRING_PTR(value), RSTRING_LEN(value));
case T_NIL:
return Null();
case T_TRUE:
return True();
case T_FALSE:
return False();
case T_DATA:
return V8_Ref_Get<Value>(value);
case T_OBJECT:
return rr_reflect_rb_object(value);
case T_CLASS:
case T_ICLASS:
case T_MODULE:
case T_REGEXP:
case T_MATCH:
case T_ARRAY:
case T_HASH:
case T_STRUCT:
case T_BIGNUM:
case T_FILE:
case T_SYMBOL:
case T_BLKTAG:
case T_UNDEF:
case T_VARMAP:
case T_SCOPE:
case T_NODE:
default:
return String::New("Undefined Conversion");
2010-05-13 17:53:09 -04:00
}
2010-05-13 17:53:09 -04:00
return Undefined();
}
2010-05-12 18:30:53 -04:00
// VALUE rr_v82rb(v8::ScriptData *data) {
2010-05-11 13:41:07 -04:00
// return rr_thunk(rr_wrap_script_data(data));
// }