2009-12-07 09:20:16 +02:00
|
|
|
#include "v8_cxt.h"
|
2009-12-18 09:48:06 +02:00
|
|
|
#include "v8_msg.h"
|
|
|
|
#include "converters.h"
|
2009-12-07 09:20:16 +02:00
|
|
|
|
|
|
|
using namespace v8;
|
|
|
|
|
2009-12-11 19:11:05 +02:00
|
|
|
VALUE v8_Context_New(int argc, VALUE *argv, VALUE self) {
|
|
|
|
HandleScope handles;
|
|
|
|
VALUE scope;
|
|
|
|
rb_scan_args(argc,argv, "01", &scope);
|
|
|
|
if (NIL_P(scope)) {
|
|
|
|
return V8_Ref_Create(self, Context::New());
|
|
|
|
} else {
|
2009-12-13 17:08:55 +02:00
|
|
|
Local<ObjectTemplate> t = V8_Ref_Get<ObjectTemplate>(scope);
|
2009-12-11 19:11:05 +02:00
|
|
|
return V8_Ref_Create(self, Context::New(0, t));
|
|
|
|
}
|
2009-12-07 16:06:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
VALUE v8_cxt_Global(VALUE self) {
|
2009-12-18 09:48:06 +02:00
|
|
|
HandleScope handles;
|
2009-12-13 17:08:55 +02:00
|
|
|
Local<Context> cxt = V8_Ref_Get<Context>(self);
|
2009-12-18 09:48:06 +02:00
|
|
|
Local<Value> global = *cxt->Global();
|
2009-12-25 23:17:30 -05:00
|
|
|
return V82RB(global);
|
2009-12-07 16:06:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
VALUE v8_cxt_open(VALUE self) {
|
|
|
|
HandleScope handles;
|
2009-12-13 17:08:55 +02:00
|
|
|
Local<Context> cxt = V8_Ref_Get<Context>(self);
|
2009-12-07 16:06:06 +02:00
|
|
|
Context::Scope enter(cxt);
|
|
|
|
if (rb_block_given_p()) {
|
2010-01-09 18:55:37 +02:00
|
|
|
return rb_yield(self);
|
2009-12-07 16:06:06 +02:00
|
|
|
} else {
|
|
|
|
return Qnil;
|
|
|
|
}
|
2009-12-07 09:20:16 +02:00
|
|
|
}
|
|
|
|
|
2009-12-20 19:31:02 +02:00
|
|
|
VALUE v8_cxt_eval(VALUE self, VALUE source) {
|
|
|
|
HandleScope handles;
|
2010-01-09 18:55:37 +02:00
|
|
|
TryCatch exceptions;
|
2009-12-20 19:31:02 +02:00
|
|
|
Local<Context> cxt = V8_Ref_Get<Context>(self);
|
|
|
|
Context::Scope enter(cxt);
|
|
|
|
Local<Value> source_str = RB2V8(source);
|
|
|
|
Local<Script> script = Script::Compile(source_str->ToString());
|
|
|
|
Local<Value> result = script->Run();
|
2010-01-09 18:55:37 +02:00
|
|
|
if (exceptions.HasCaught()) {
|
|
|
|
return V8_Ref_Create(V8_C_Message, exceptions.Message());
|
|
|
|
} else {
|
|
|
|
return V82RB(result);
|
|
|
|
}
|
2009-12-20 19:31:02 +02:00
|
|
|
}
|
|
|
|
|
2009-12-07 09:20:16 +02:00
|
|
|
|