mirror of
https://github.com/rubyjs/therubyracer
synced 2023-03-27 23:21:42 -04:00
95 lines
2.6 KiB
C++
95 lines
2.6 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("GetScriptId", &GetScriptId).
|
|
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::GetScriptId(VALUE self) {
|
|
Function function(self);
|
|
Locker lock(function.getIsolate());
|
|
|
|
return INT2FIX(function->ScriptId());
|
|
}
|
|
|
|
VALUE Function::GetScriptOrigin(VALUE self) {
|
|
return not_implemented("GetScriptOrigin");
|
|
}
|
|
|
|
}
|