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

47 lines
1.2 KiB
C++
Raw Normal View History

2009-12-07 09:06:06 -05:00
#include "v8_str.h"
#include "v8.h"
#include "v8_ref.h"
2010-05-31 03:06:29 -04:00
#include "v8_value.h"
2009-12-07 09:06:06 -05:00
using namespace v8;
2010-05-12 18:30:53 -04:00
namespace {
VALUE StringClass;
Handle<String> unwrap(VALUE value) {
return V8_Ref_Get<String>(value);
}
VALUE New(VALUE klazz, VALUE data) {
HandleScope handles;
2010-05-12 18:30:53 -04:00
VALUE str = rb_funcall(data, rb_intern("to_s"), 0);
return V8_Ref_Create(StringClass, String::New(RSTRING_PTR(str), RSTRING_LEN(str)));
}
VALUE Utf8Value(VALUE self) {
HandleScope handles;
2010-05-12 18:30:53 -04:00
return rb_str_new2(*String::Utf8Value(unwrap(self)));
}
VALUE Utf16Value(VALUE self) {
//How are UTF16 strings represented in ruby 1.8, 1.9
return Qnil;
}
VALUE AsciiValue(VALUE self) {
HandleScope handles;
2010-05-12 18:30:53 -04:00
return rb_str_new2(*String::AsciiValue(unwrap(self)));
}
}
2010-05-12 18:30:53 -04:00
VALUE rr_reflect_v8_string(Handle<Value> value) {
2009-12-07 09:06:06 -05:00
HandleScope handles;
2010-05-12 18:30:53 -04:00
Local<String> string = String::Cast(*value);
return V8_Ref_Create(StringClass, string);
2009-12-07 09:06:06 -05:00
}
2010-05-12 18:30:53 -04:00
void rr_init_str() {
2010-05-31 03:06:29 -04:00
StringClass = rr_define_class("String", rr_cV8_C_Value);
2010-05-12 18:30:53 -04:00
rr_define_singleton_method(StringClass, "New", New, 1);
rr_define_method(StringClass, "Utf8Value", Utf8Value, 0);
rr_define_method(StringClass, "Utf16Value", Utf16Value, 0);
rr_define_method(StringClass, "AsciiValue", AsciiValue, 0);
2009-12-07 09:06:06 -05:00
}