Hi Sebastian,

You are missing setting of array length when creating it in the
Enumerator function:
result = Array::New()    -->    result = Array::New(1)

Hints:
 - you can link with debug version of v8 lib (v8_g) to get more
meaningful stack trace;
 - look for examples of using API in tests (test/cctest)

Good luck!

On Tue, Oct 5, 2010 at 01:07, Sebastian Morawietz
<[email protected]> wrote:
> The following code seems pretty straight forward to me, but produces a
> crash (OS X 10.6.4).
>
>
> #include <v8.h>
>
> using namespace v8;
>
> Handle<Value>
> Getter(Local<String> property, const AccessorInfo& info ) {
>    return String::New("42!");
> }
>
> Handle<Array>
> Enumerator(const AccessorInfo& info) {
>    Handle<Array> result = Array::New();
>    result->Set(0, String::New("universalAnswer"));
>    return result;
> }
>
> Handle<Integer>
> Query(Local<String> property, const AccessorInfo& info) {
>    return Integer::New(DontDelete | ReadOnly );
> }
>
> int main(int argc, char* argv[]) {
>    HandleScope handle_scope;
>    Persistent<Context> context = Context::New();
>    Context::Scope context_scope(context);
>
>    Handle<ObjectTemplate> tmpl = ObjectTemplate::New();
>    tmpl->SetNamedPropertyHandler(Getter, 0 ,Query, 0,Enumerator);
>    context->Global()->Set(String::New("test"), tmpl->NewInstance() );
>    Handle<String> source = String::New("JSON.stringify(test)");
>
>    Handle<Script> script = Script::Compile(source);
>    Handle<Value> result = script->Run();
>    context.Dispose();
>    String::AsciiValue ascii(result);
>    printf("%s\n", *ascii);
>    return 0;
> }
>
>
> GDB isn't really helpful, this is the output
>
>
> (gdb) run
> Starting program: /Users/smorawietz/devel/test/cpp/v8test
> Reading symbols for shared libraries ++. done
>
> Program received signal EXC_BAD_ACCESS, Could not access memory.
> Reason: KERN_INVALID_ADDRESS at address: 0xffffffffffffffff
> 0x00000001000f1150 in v8::internal::JSObject::LocalLookup ()
> (gdb) bt
> #0  0x00000001000f1150 in v8::internal::JSObject::LocalLookup ()
> #1  0x00000001000f16fe in v8::internal::Object::Lookup ()
> Previous frame inner to this frame (gdb could not unwind past this
> frame)
> (gdb)
>
>
> What am I missing?
>
> Greets
> Sebastian
>
> --
> 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