Hi, I tried running your script on Windows - it produces no error,
even if script evaluation is repeated 100 times. I'm using some recent
version of V8 (checked out a couple of days ago)

Regards,
Deadmorous

2010/2/23 Igor Sysoev <[email protected]>:
> 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

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to