diff --git a/src/fs_event_wrap.cc b/src/fs_event_wrap.cc index 78b7cf1c1d..985171fcd4 100644 --- a/src/fs_event_wrap.cc +++ b/src/fs_event_wrap.cc @@ -28,7 +28,9 @@ using namespace v8; namespace node { +static Persistent change_sym; static Persistent onchange_sym; +static Persistent rename_sym; class FSEventWrap: public HandleWrap { public: @@ -76,6 +78,10 @@ void FSEventWrap::Initialize(Handle target) { target->Set(String::NewSymbol("FSEvent"), Persistent::New(node_isolate, t)->GetFunction()); + + change_sym = NODE_PSYMBOL("change"); + onchange_sym = NODE_PSYMBOL("onchange"); + rename_sym = NODE_PSYMBOL("rename"); } @@ -118,7 +124,7 @@ Handle FSEventWrap::Start(const Arguments& args) { void FSEventWrap::OnEvent(uv_fs_event_t* handle, const char* filename, int events, int status) { HandleScope scope(node_isolate); - Local eventStr; + Handle eventStr; FSEventWrap* wrap = static_cast(handle->data); @@ -140,27 +146,22 @@ void FSEventWrap::OnEvent(uv_fs_event_t* handle, const char* filename, eventStr = String::Empty(node_isolate); } else if (events & UV_RENAME) { - eventStr = String::New("rename"); + eventStr = rename_sym; } else if (events & UV_CHANGE) { - eventStr = String::New("change"); + eventStr = change_sym; } else { assert(0 && "bad fs events flag"); abort(); } - Local argv[3] = { + Handle argv[3] = { Integer::New(status, node_isolate), eventStr, - filename ? static_cast >(String::New(filename)) - : Local::New(node_isolate, v8::Null(node_isolate)) + filename ? String::New(filename) : v8::Null(node_isolate) }; - if (onchange_sym.IsEmpty()) { - onchange_sym = NODE_PSYMBOL("onchange"); - } - MakeCallback(wrap->object_, onchange_sym, ARRAY_SIZE(argv), argv); }