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

114 lines
3.1 KiB
C++

#include "rr.h"
namespace rr {
void Function::Init() {
ClassBuilder("Function", Object::Class).
defineMethod("NewInstance", &NewInstance).
defineMethod("Call", &Call).
defineMethod("SetName", &SetName).
defineMethod("GetName", &GetName).
defineMethod("GetInferredName", &GetInferredName).
defineMethod("GetScriptLineNumber", &GetScriptLineNumber).
defineMethod("GetScriptColumnNumber", &GetScriptColumnNumber).
defineMethod("IsBuiltin", &IsBuiltin).
defineMethod("ScriptId", &ScriptId).
defineMethod("GetBoundFunction", &GetBoundFunction).
defineMethod("GetScriptOrigin", &GetScriptOrigin).
store(&Class);
}
VALUE Function::NewInstance(int argc, VALUE argv[], VALUE self) {
VALUE args;
rb_scan_args(argc, argv, "01", &args);
Function function(self);
v8::Isolate* isolate = function.getIsolate();
Locker lock(isolate);
if (RTEST(args)) {
std::vector< v8::Handle<v8::Value> > vector(Value::convertRubyArray(isolate, args));
return Object(isolate, function->NewInstance(RARRAY_LENINT(args), &vector[0]));
} else {
return Object(isolate, function->NewInstance());
}
}
VALUE Function::Call(VALUE self, VALUE receiver, VALUE argv) {
Function function(self);
v8::Isolate* isolate = function.getIsolate();
Locker lock(isolate);
std::vector< v8::Handle<v8::Value> > vector(Value::convertRubyArray(isolate, argv));
return Value::handleToRubyObject(isolate, function->Call(Value(receiver), RARRAY_LENINT(argv), &vector[0]));
}
VALUE Function::SetName(VALUE self, VALUE name) {
Function function(self);
Locker lock(function.getIsolate());
function->SetName(String(name));
return Qnil;
}
VALUE Function::GetName(VALUE self) {
Function function(self);
Locker lock(function.getIsolate());
return Value::handleToRubyObject(function.getIsolate(), function->GetName());
}
VALUE Function::GetInferredName(VALUE self) {
Function function(self);
Locker lock(function.getIsolate());
return Value::handleToRubyObject(function.getIsolate(), function->GetInferredName());
}
VALUE Function::GetScriptLineNumber(VALUE self) {
Function function(self);
Locker lock(function.getIsolate());
return INT2FIX(function->GetScriptLineNumber());
}
VALUE Function::GetScriptColumnNumber(VALUE self) {
Function function(self);
Locker lock(function.getIsolate());
return INT2FIX(function->GetScriptColumnNumber());
}
VALUE Function::IsBuiltin(VALUE self) {
Function function(self);
Locker lock(function);
return Bool(function->IsBuiltin());
}
VALUE Function::ScriptId(VALUE self) {
Function function(self);
Locker lock(function.getIsolate());
return INT2FIX(function->ScriptId());
}
VALUE Function::GetBoundFunction(VALUE self) {
Function function(self);
Locker lock(function);
return Value(function.getIsolate(), function->GetBoundFunction());
}
VALUE Function::GetScriptOrigin(VALUE self) {
Function function(self);
Locker lock(function);
return ScriptOrigin(function, function->GetScriptOrigin());
}
}