@ -1933,7 +1933,7 @@ static Handle<Array> EnvEnumerator(const AccessorInfo& info) {
}
static void Load ( int argc , char * argv [ ] ) {
Handle < Object > SetupProcessObject ( int argc , char * argv [ ] ) {
HandleScope scope ;
int i , j ;
@ -2064,12 +2064,31 @@ static void Load(int argc, char *argv[]) {
process - > Set ( String : : NewSymbol ( " EventEmitter " ) ,
EventEmitter : : constructor_template - > GetFunction ( ) ) ;
return process ;
}
static void AtExit ( ) {
node : : Stdio : : Flush ( ) ;
node : : Stdio : : DisableRawMode ( STDIN_FILENO ) ;
}
static void SignalExit ( int signal ) {
Stdio : : DisableRawMode ( STDIN_FILENO ) ;
_exit ( 1 ) ;
}
void Load ( Handle < Object > process ) {
// Compile, execute the src/node.js file. (Which was included as static C
// string in node_natives.h. 'natve_node' is the string containing that
// source code.)
// The node.js file returns a function 'f'
atexit ( AtExit ) ;
TryCatch try_catch ;
Local < Value > f_value = ExecuteString ( MainSource ( ) ,
@ -2156,11 +2175,11 @@ static void PrintHelp() {
}
// Parse node command line arguments.
static void ParseArgs ( int * argc , char * * argv ) {
static void ParseArgs ( int argc , char * * argv ) {
int i ;
// TODO use parse opts
for ( i = 1 ; i < * argc ; i + + ) {
for ( i = 1 ; i < argc ; i + + ) {
const char * arg = argv [ i ] ;
if ( strstr ( arg , " --debug " ) = = arg ) {
ParseDebugOpt ( arg ) ;
@ -2181,7 +2200,7 @@ static void ParseArgs(int *argc, char **argv) {
PrintHelp ( ) ;
exit ( 0 ) ;
} else if ( strcmp ( arg , " --eval " ) = = 0 | | strcmp ( arg , " -e " ) = = 0 ) {
if ( * argc < = i + 1 ) {
if ( argc < = i + 1 ) {
fprintf ( stderr , " Error: --eval requires an argument \n " ) ;
exit ( 1 ) ;
}
@ -2198,18 +2217,6 @@ static void ParseArgs(int *argc, char **argv) {
}
static void AtExit ( ) {
node : : Stdio : : Flush ( ) ;
node : : Stdio : : DisableRawMode ( STDIN_FILENO ) ;
}
static void SignalExit ( int signal ) {
Stdio : : DisableRawMode ( STDIN_FILENO ) ;
_exit ( 1 ) ;
}
static void EnableDebug ( bool wait_connect ) {
// Start the debug thread and it's associated TCP server on port 5858.
bool r = Debug : : EnableAgent ( " node " NODE_VERSION , debug_port ) ;
@ -2262,12 +2269,12 @@ static int RegisterSignalHandler(int signal, void (*handler)(int)) {
# endif // __POSIX__
int Star t( int argc , char * argv [ ] ) {
char * * Ini t( int argc , char * argv [ ] ) {
// Hack aroung with the argv pointer. Used for process.title = "blah".
argv = node : : Platform : : SetupArgs ( argc , argv ) ;
// Parse a few arguments which are specific to Node.
node : : ParseArgs ( & argc , argv ) ;
node : : ParseArgs ( argc , argv ) ;
// Parse the rest of the args (up to the 'option_end_index' (where '--' was
// in the command line))
int v8argc = node : : option_end_index ;
@ -2354,9 +2361,6 @@ int Start(int argc, char *argv[]) {
eio_set_max_poll_reqs ( 10 ) ;
}
V8 : : Initialize ( ) ;
HandleScope handle_scope ;
V8 : : SetFatalErrorHandler ( node : : OnFatalError ) ;
@ -2386,15 +2390,39 @@ int Start(int argc, char *argv[]) {
# endif // __POSIX__
}
return argv ;
}
void EmitExit ( v8 : : Handle < v8 : : Object > process ) {
// process.emit('exit')
Local < Value > emit_v = process - > Get ( String : : New ( " emit " ) ) ;
assert ( emit_v - > IsFunction ( ) ) ;
Local < Function > emit = Local < Function > : : Cast ( emit_v ) ;
Local < Value > args [ ] = { String : : New ( " exit " ) } ;
TryCatch try_catch ;
emit - > Call ( process , 1 , args ) ;
if ( try_catch . HasCaught ( ) ) {
FatalException ( try_catch ) ;
}
}
int Start ( int argc , char * argv [ ] ) {
v8 : : V8 : : Initialize ( ) ;
v8 : : HandleScope handle_scope ;
argv = Init ( argc , argv ) ;
// Create the one and only Context.
Persistent < v8 : : Context > context = v8 : : Context : : New ( ) ;
v8 : : Context : : Scope context_scope ( context ) ;
atexit ( node : : AtExit ) ;
Handle < Object > process = SetupProcessObject ( argc , argv ) ;
// Create all the objects, load modules, do everything.
// so your next reading stop should be node::Load()!
node : : Load ( argc , argv ) ;
Load ( process ) ;
// TODO Probably don't need to start this each time.
// Avoids failing on test/simple/test-eio-race3.js though
@ -2407,18 +2435,7 @@ int Start(int argc, char *argv[]) {
// watchers, it blocks.
ev_loop ( EV_DEFAULT_UC_ 0 ) ;
// process.emit('exit')
Local < Value > emit_v = process - > Get ( String : : New ( " emit " ) ) ;
assert ( emit_v - > IsFunction ( ) ) ;
Local < Function > emit = Local < Function > : : Cast ( emit_v ) ;
Local < Value > args [ ] = { String : : New ( " exit " ) } ;
TryCatch try_catch ;
emit - > Call ( process , 1 , args ) ;
if ( try_catch . HasCaught ( ) ) {
FatalException ( try_catch ) ;
}
EmitExit ( process ) ;
# ifndef NDEBUG
// Clean up.