1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00
therubyracer/ext/v8/symbol.cc
2015-07-10 19:17:06 -05:00

74 lines
2 KiB
C++

#include "rr.h"
namespace rr {
void Symbol::Init() {
ClassBuilder("Symbol", Name::Class).
defineSingletonMethod("New", &New).
defineSingletonMethod("For", &For).
defineSingletonMethod("ForApi", &ForApi).
defineSingletonMethod("GetIterator", &GetIterator).
defineSingletonMethod("GetUnscopables", &GetUnscopables).
defineSingletonMethod("GetToStringTag", &GetToStringTag).
defineMethod("Name", &Name).
store(&Class);
}
VALUE Symbol::New(int argc, VALUE argv[], VALUE self) {
VALUE rb_isolate, rb_name;
rb_scan_args(argc, argv, "11", &rb_isolate, &rb_name);
Isolate isolate(rb_isolate);
Locker lock(isolate);
v8::HandleScope handle_scope(isolate);
if (RTEST(rb_name)) {
return Symbol(isolate, v8::Symbol::New(isolate, String(rb_name)));
} else {
return Symbol(isolate, v8::Symbol::New(isolate));
}
}
VALUE Symbol::For(VALUE self, VALUE rb_isolate, VALUE name) {
Isolate isolate(rb_isolate);
Locker lock(isolate);
return Symbol(isolate, v8::Symbol::For(isolate, String(name)));
}
VALUE Symbol::ForApi(VALUE self, VALUE rb_isolate, VALUE name) {
Isolate isolate(rb_isolate);
Locker lock(isolate);
return Symbol(isolate, v8::Symbol::ForApi(isolate, String(name)));
}
VALUE Symbol::GetIterator(VALUE self, VALUE rb_isolate) {
Isolate isolate(rb_isolate);
Locker lock(isolate);
return Symbol(isolate, v8::Symbol::GetIterator(isolate));
}
VALUE Symbol::GetUnscopables(VALUE self, VALUE rb_isolate) {
Isolate isolate(rb_isolate);
Locker lock(isolate);
return Symbol(isolate, v8::Symbol::GetUnscopables(isolate));
}
VALUE Symbol::GetToStringTag(VALUE self, VALUE rb_isolate) {
Isolate isolate(rb_isolate);
Locker lock(isolate);
return Symbol(isolate, v8::Symbol::GetToStringTag(isolate));
}
VALUE Symbol::Name(VALUE self) {
Symbol symbol(self);
Isolate isolate(symbol.getIsolate());
Locker lock(isolate);
return Value::handleToRubyObject(isolate, symbol->Name());
}
}