Clean ups
authorRyan <ry@tinyclouds.org>
Wed, 17 Jun 2009 13:05:44 +0000 (15:05 +0200)
committerRyan <ry@tinyclouds.org>
Wed, 17 Jun 2009 13:05:44 +0000 (15:05 +0200)
src/net.h
src/node.cc
website/index.html

index 7ba05fe..5852f3e 100644 (file)
--- a/src/net.h
+++ b/src/net.h
@@ -33,7 +33,9 @@ protected:
   Connection (v8::Handle<v8::Object> handle); 
   virtual ~Connection ();
 
-  int Connect (struct addrinfo *address) { return oi_socket_connect (&socket_, address); }
+  int Connect (struct addrinfo *address) {
+    return oi_socket_connect (&socket_, address);
+  }
   void Send (oi_buf *buf) { oi_socket_write(&socket_, buf); }
   void Close (void) { oi_socket_close(&socket_); }
   void FullClose (void) { oi_socket_full_close(&socket_); }
@@ -66,12 +68,10 @@ private:
 
   static void on_read (oi_socket *s, const void *buf, size_t len) {
     Connection *connection = static_cast<Connection*> (s->data);
-    v8::V8::ResumeProfiler();
     if (len == 0)
       connection->OnEOF();
     else
       connection->OnReceive(buf, len);
-    v8::V8::PauseProfiler();
   }
 
   static void on_drain (oi_socket *s) {
index ba8df9a..31005d9 100644 (file)
@@ -280,67 +280,44 @@ ExecuteNativeJS (const char *filename, const char *data)
   }
 }
 
-int
-main (int argc, char *argv[]) 
+static Local<Object>
+Load (int argc, char *argv[])
 {
-  ev_default_loop(EVFLAG_AUTO); // initialize the default ev loop.
-
-  // start eio thread pool
-  ev_async_init(&eio_watcher, node_eio_cb);
-  eio_init(eio_want_poll, NULL);
-
-  V8::SetFlagsFromCommandLine(&argc, argv, true);
-  V8::Initialize();
-
-  if(argc < 2)  {
-    fprintf(stderr, "No script was specified.\n");
-    return 1;
-  }
-
-  string filename(argv[1]);
-
-  HandleScope handle_scope;
-
-  Persistent<Context> context = Context::New(NULL, ObjectTemplate::New());
-  Context::Scope context_scope(context);
-  V8::SetFatalErrorHandler(OnFatalError);
-
-  Local<Object> g = Context::GetCurrent()->Global();
-
-  V8::PauseProfiler(); // to be resumed in Connection::on_read
+  HandleScope scope;
 
-  Local<Object> node = Object::New();
-  g->Set(String::New("node"), node);
+  Local<Object> global_obj = Context::GetCurrent()->Global();
+  Local<Object> node_obj = Object::New();
 
-  NODE_SET_METHOD(node, "compile", compile); // internal 
-  NODE_SET_METHOD(node, "debug", debug);
-  NODE_SET_METHOD(node, "reallyExit", node_exit);
+  global_obj->Set(String::NewSymbol("node"), node_obj);
 
   Local<Array> arguments = Array::New(argc);
   for (int i = 0; i < argc; i++) {
     Local<String> arg = String::New(argv[i]);
     arguments->Set(Integer::New(i), arg);
   }
-  g->Set(String::New("ARGV"), arguments);
+  global_obj->Set(String::NewSymbol("ARGV"), arguments);
 
-  // BUILT-IN MODULES
-  Timer::Initialize(node);
+  NODE_SET_METHOD(node_obj, "compile", compile);
+  NODE_SET_METHOD(node_obj, "debug", debug);
+  NODE_SET_METHOD(node_obj, "reallyExit", node_exit);
+
+  Timer::Initialize(node_obj);
 
   Local<Object> constants = Object::New();
-  node->Set(String::New("constants"), constants);
+  node_obj->Set(String::NewSymbol("constants"), constants);
   DefineConstants(constants);
 
   Local<Object> fs = Object::New();
-  node->Set(String::New("fs"), fs);
+  node_obj->Set(String::NewSymbol("fs"), fs);
   File::Initialize(fs);
 
   Local<Object> tcp = Object::New();
-  node->Set(String::New("tcp"), tcp);
+  node_obj->Set(String::New("tcp"), tcp);
   Acceptor::Initialize(tcp);
   Connection::Initialize(tcp);
 
   Local<Object> http = Object::New();
-  node->Set(String::New("http"), http);
+  node_obj->Set(String::New("http"), http);
   HTTPServer::Initialize(http);
   HTTPConnection::Initialize(http);
 
@@ -348,25 +325,52 @@ main (int argc, char *argv[])
   ExecuteNativeJS("file.js", native_file);
   ExecuteNativeJS("node.js", native_node);
 
-  ev_loop(EV_DEFAULT_UC_ 0);
+  return scope.Close(node_obj);
+}
 
-  // call node.exit() 
-  Local<Value> exit_v = node->Get(String::New("exit"));
+static void
+CallExitHandler (Handle<Object> node_obj)
+{
+  HandleScope scope;
+  Local<Value> exit_v = node_obj->Get(String::New("exit"));
   assert(exit_v->IsFunction());
   Handle<Function> exit_f = Handle<Function>::Cast(exit_v);
   TryCatch try_catch;
-  exit_f->Call(g, 0, NULL);
+  exit_f->Call(Context::GetCurrent()->Global(), 0, NULL);
   if (try_catch.HasCaught())
     node::FatalException(try_catch);
+}
+
+int
+main (int argc, char *argv[]) 
+{
+  ev_default_loop(EVFLAG_AUTO); // initialize the default ev loop.
+
+  // start eio thread pool
+  ev_async_init(&eio_watcher, node_eio_cb);
+  eio_init(eio_want_poll, NULL);
+
+  V8::SetFlagsFromCommandLine(&argc, argv, true);
+  V8::Initialize();
+  V8::SetFatalErrorHandler(OnFatalError);
+
+  if(argc < 2)  {
+    fprintf(stderr, "No script was specified.\n");
+    return 1;
+  }
+
+  HandleScope handle_scope;
+  Persistent<Context> context = Context::New(NULL, ObjectTemplate::New());
+  Context::Scope context_scope(context);
+
+  Local<Object> node_obj = Load(argc, argv);
+
+  ev_loop(EV_DEFAULT_UC_ 0); // main event loop
+
+  CallExitHandler(node_obj);
 
   context.Dispose();
-  // The following line when uncommented causes an error.
-  // To reproduce do this:
-  // > node --prof test-http_simple.js 
-  // 
-  // > curl http://localhost:8000/quit/
-  //
-  //V8::Dispose();
+  V8::Dispose();
 
   return 0;
 }
index 989a4fc..de0eaff 100644 (file)
@@ -194,9 +194,7 @@ make install</pre>
 
       <p>To run the tests</p>
 
-      <pre class="sh_none">
-./configure --debug
-make test</pre>
+      <pre class="sh_none">make test</pre>
 
       <h2 id="community">Community</h2>
       <p>