Hi,
could anyone tell why the program below is able to run the script only
two times:
------
i: 0
result: 10
i: 1
result: 11
i: 2
Segmentation fault: 11 (core dumped)
------
If I remove from JS script access to an external object and change it
to something like "'Hello '+'World'", it runs without issues.
I use revision r3690.
------
#include <iostream>
#include <v8.h>
using namespace std;
using namespace v8;
Persistent<FunctionTemplate> ft;
Persistent<Context> context;
Persistent<Script> script;
typedef struct {
int value;
} v8_object_t;
v8_object_t obj;
int i;
static Handle<Value>
v8_get(Local<String> property, const AccessorInfo& info)
{
cout << "i: " << i << endl;
return Integer::New(10 + i++);
}
static void
v8_set(Local<String> property, Local<Value> value, const AccessorInfo&
info)
{
// void
}
main()
{
HandleScope handle_scope;
Local<FunctionTemplate> lf = FunctionTemplate::New();
ft = Persistent<FunctionTemplate>::New(lf);
Local<ObjectTemplate> ot = ft->InstanceTemplate();
ot->SetInternalFieldCount(1);
ot->SetAccessor(String::New("value"), v8_get, v8_set);
context = Context::New();
Context::Scope context_scope(context);
TryCatch try_catch;
Local<Function> f = ft->GetFunction();
Persistent<Object> o = Persistent<Object>::New(f->NewInstance());
o->SetInternalField(0, External::New(&obj));
context->Global()->Set(String::New("object"), o);
Local<Script> s = Script::New(String::New("object.value"));
if (s.IsEmpty()) {
Local<Value> exception = try_catch.Exception();
String::Utf8Value text(exception);
cout << "v8 compilation failed: " << *text << endl;
exit(1);
}
script = Persistent<Script>::New(s);
Local<Value> result = script->Run();
cout << "result: " << *String::Utf8Value(result) << endl;
result = script->Run();
cout << "result: " << *String::Utf8Value(result) << endl;
result = script->Run();
cout << "result: " << *String::Utf8Value(result) << endl;
}
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users