From 71470a8e45af4ee65292327e5648fcf566324b0f Mon Sep 17 00:00:00 2001 From: Phillip Kovalev Date: Wed, 20 Jan 2016 00:52:16 +0300 Subject: [PATCH] module: pass v8::Object to linked module initialization function Fixes: https://github.com/nodejs/node/issues/4756 PR-URL: https://github.com/nodejs/node/pull/4771 Reviewed-By: Ben Noordhuis Reviewed-By: Fedor Indutny Reviewed-By: Rod Vagg --- src/node.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/node.cc b/src/node.cc index 29127fbfc620ca..63cde126830be9 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2407,27 +2407,30 @@ static void Binding(const FunctionCallbackInfo& args) { static void LinkedBinding(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args.GetIsolate()); - Local module = args[0]->ToString(env->isolate()); + Local module_name = args[0]->ToString(env->isolate()); Local cache = env->binding_cache_object(); - Local exports_v = cache->Get(module); + Local exports_v = cache->Get(module_name); if (exports_v->IsObject()) return args.GetReturnValue().Set(exports_v.As()); - node::Utf8Value module_v(env->isolate(), module); - node_module* mod = get_linked_module(*module_v); + node::Utf8Value module_name_v(env->isolate(), module_name); + node_module* mod = get_linked_module(*module_name_v); if (mod == nullptr) { char errmsg[1024]; snprintf(errmsg, sizeof(errmsg), "No such module was linked: %s", - *module_v); + *module_name_v); return env->ThrowError(errmsg); } + Local module = Object::New(env->isolate()); Local exports = Object::New(env->isolate()); + Local exports_prop = String::NewFromUtf8(env->isolate(), "exports"); + module->Set(exports_prop, exports); if (mod->nm_context_register_func != nullptr) { mod->nm_context_register_func(exports, @@ -2440,7 +2443,7 @@ static void LinkedBinding(const FunctionCallbackInfo& args) { return env->ThrowError("Linked module has no declared entry point."); } - cache->Set(module, exports); + cache->Set(module_name, module->Get(exports_prop)); args.GetReturnValue().Set(exports); }