Hi, I must be missing something obvious.  Can anyone tell me why this 
lightly modified Hello World program crashes?  (e.g.  "terminated by signal 
SIGSEGV (Address boundary error)")

#include <v8.h>
using namespace v8;

int main (int argc, char* argv[])
{ Isolate* i = Isolate::GetCurrent();
  HandleScope _ (i);                 

  // These 3 lines are taken basically from v8.h docs on FunctionTemplate
  v8::Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New();
  t -> Set ("func_property", v8::Number::New(1));
  t -> GetFunction ();     // crash in here

  v8::Handle <v8::Context> context = v8::Context::New (i);
  Context::Scope context_scope (context);
  Handle <String> source = String::NewFromUtf8 (i, "hello world");
  Handle <Script> script = Script::Compile (source);
  Handle <Value> result = script -> Run();
  String::Utf8Value utf8 (result);
  printf ("%s\n", *utf8);
  return 0;
}

If I put the offending 3 lines after the context initialization, it works. 
 However, that's a problem -- all my interesting binding code (just like 
all the binding code in the examples) needs to happen BEFORE  the context 
is set up, right?  I want to decorate a global object and pass that as the 
3rd argument to Context::New().  What I actually want to do are things like 
this, found in the node addon sample code, but is is the case that I just 
can't do things like this until after the context is already in place?


void MyObject::Init(Handle<Object> exports) {
  Isolate* isolate = Isolate::GetCurrent();

  // Prepare constructor template
  Local<FunctionTemplate> tpl = FunctionTemplate::New(New);
  tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));
  tpl->InstanceTemplate()->SetInternalFieldCount(1);

  // Prototype
  NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);

  constructor.Reset(isolate, tpl->GetFunction());
  exports->Set(String::NewFromUtf8(isolate, "MyObject"),
               tpl->GetFunction());}


thanks,
Brandon

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to