From c80f8fa8f108d8db598b260ddf26bafd2ec8a1f8 Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Thu, 1 Aug 2013 14:53:52 -0700 Subject: [PATCH] process: set key properties as ReadOnly --- src/node.cc | 60 +++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/node.cc b/src/node.cc index bcc3996..649fd92 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2199,6 +2199,12 @@ static void NeedImmediateCallbackSetter(Local property, } +#define READONLY_PROPERTY(obj, str, var) \ + do { \ + obj->Set(String::New(str), var, v8::ReadOnly); \ + } while (0) + + Handle SetupProcessObject(int argc, char *argv[]) { HandleScope scope(node_isolate); @@ -2218,27 +2224,27 @@ Handle SetupProcessObject(int argc, char *argv[]) { ProcessTitleSetter); // process.version - process->Set(String::NewSymbol("version"), String::New(NODE_VERSION)); + READONLY_PROPERTY(process, "version", String::New(NODE_VERSION)); // process.moduleLoadList Local modules = Array::New(); module_load_list.Reset(node_isolate, modules); - process->Set(String::NewSymbol("moduleLoadList"), modules); + READONLY_PROPERTY(process, "moduleLoadList", modules); // process.versions Local versions = Object::New(); - process->Set(String::NewSymbol("versions"), versions); - versions->Set(String::NewSymbol("http_parser"), String::New( - NODE_STRINGIFY(HTTP_PARSER_VERSION_MAJOR) "." - NODE_STRINGIFY(HTTP_PARSER_VERSION_MINOR))); + READONLY_PROPERTY(process, "versions", versions); + READONLY_PROPERTY(versions, "http_parser", String::New( + NODE_STRINGIFY(HTTP_PARSER_VERSION_MAJOR) "." + NODE_STRINGIFY(HTTP_PARSER_VERSION_MINOR))); // +1 to get rid of the leading 'v' - versions->Set(String::NewSymbol("node"), String::New(NODE_VERSION+1)); - versions->Set(String::NewSymbol("v8"), String::New(V8::GetVersion())); - versions->Set(String::NewSymbol("ares"), String::New(ARES_VERSION_STR)); - versions->Set(String::NewSymbol("uv"), String::New(uv_version_string())); - versions->Set(String::NewSymbol("zlib"), String::New(ZLIB_VERSION)); - versions->Set(String::NewSymbol("modules"), - String::New(NODE_STRINGIFY(NODE_MODULE_VERSION))); + READONLY_PROPERTY(versions, "node", String::New(NODE_VERSION+1)); + READONLY_PROPERTY(versions, "v8", String::New(V8::GetVersion())); + READONLY_PROPERTY(versions, "uv", String::New(uv_version_string())); + READONLY_PROPERTY(versions, "zlib", String::New(ZLIB_VERSION)); + READONLY_PROPERTY(versions, + "modules", + String::New(NODE_STRINGIFY(NODE_MODULE_VERSION))); #if HAVE_OPENSSL // Stupid code to slice out the version string. int c, l = strlen(OPENSSL_VERSION_TEXT); @@ -2252,17 +2258,18 @@ Handle SetupProcessObject(int argc, char *argv[]) { break; } } - versions->Set(String::NewSymbol("openssl"), - String::New(&OPENSSL_VERSION_TEXT[i], j - i)); + READONLY_PROPERTY(versions, + "openssl", + String::New(&OPENSSL_VERSION_TEXT[i], j - i)); #endif // process.arch - process->Set(String::NewSymbol("arch"), String::New(ARCH)); + READONLY_PROPERTY(process, "arch", String::New(ARCH)); // process.platform - process->Set(String::NewSymbol("platform"), String::New(PLATFORM)); + READONLY_PROPERTY(process, "platform", String::New(PLATFORM)); // process.argv Local arguments = Array::New(argc - option_end_index + 1); @@ -2294,40 +2301,40 @@ Handle SetupProcessObject(int argc, char *argv[]) { Local env = envTemplate->NewInstance(); process->Set(String::NewSymbol("env"), env); - process->Set(String::NewSymbol("pid"), Integer::New(getpid(), node_isolate)); - process->Set(String::NewSymbol("features"), GetFeatures()); + READONLY_PROPERTY(process, "pid", Integer::New(getpid(), node_isolate)); + READONLY_PROPERTY(process, "features", GetFeatures()); process->SetAccessor(String::New("_needImmediateCallback"), NeedImmediateCallbackGetter, NeedImmediateCallbackSetter); // -e, --eval if (eval_string) { - process->Set(String::NewSymbol("_eval"), String::New(eval_string)); + READONLY_PROPERTY(process, "_eval", String::New(eval_string)); } // -p, --print if (print_eval) { - process->Set(String::NewSymbol("_print_eval"), True(node_isolate)); + READONLY_PROPERTY(process, "_print_eval", True(node_isolate)); } // -i, --interactive if (force_repl) { - process->Set(String::NewSymbol("_forceRepl"), True(node_isolate)); + READONLY_PROPERTY(process, "_forceRepl", True(node_isolate)); } // --no-deprecation if (no_deprecation) { - process->Set(String::NewSymbol("noDeprecation"), True(node_isolate)); + READONLY_PROPERTY(process, "noDeprecation", True(node_isolate)); } // --throw-deprecation if (throw_deprecation) { - process->Set(String::NewSymbol("throwDeprecation"), True(node_isolate)); + READONLY_PROPERTY(process, "throwDeprecation", True(node_isolate)); } // --trace-deprecation if (trace_deprecation) { - process->Set(String::NewSymbol("traceDeprecation"), True(node_isolate)); + READONLY_PROPERTY(process, "traceDeprecation", True(node_isolate)); } size_t size = 2*PATH_MAX; @@ -2398,6 +2405,9 @@ Handle SetupProcessObject(int argc, char *argv[]) { } +#undef READONLY_PROPERTY + + static void AtExit() { uv_tty_reset_mode(); } -- 2.7.4