From e19f71b6b99ab0baffb724640bc08991450a05d4 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Tue, 19 Apr 2016 15:31:29 +0200 Subject: [PATCH] v8: warn in Template::Set() on improper use The next major release will make it a fatal error to use non-primitive values in function templates and object templates. Print a warning that includes the C and JS stack trace to tell people to upgrade their add-ons. The C stack trace is only printed on platforms that support it (the BSDs, OS X and Linux+glibc.) The warning can be disabled with the new `--nowarn_template_set` flag. Refs: https://github.com/nodejs/node/issues/6216 PR-URL: https://github.com/nodejs/node/pull/6277 Reviewed-By: James M Snell --- deps/v8/src/api.cc | 10 ++++++++++ deps/v8/src/flag-definitions.h | 3 +++ 2 files changed, 13 insertions(+) diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc index f757d1dd69969a..5929f684020940 100644 --- a/deps/v8/src/api.cc +++ b/deps/v8/src/api.cc @@ -1031,6 +1031,16 @@ void Template::Set(v8::Local name, v8::Local value, i::Handle::cast(templ)->set_do_not_cache(true); } } + if (i::FLAG_warn_template_set && + value_obj->IsJSReceiver() && + !value_obj->IsTemplateInfo()) { + base::OS::PrintError( + "(node) v8::%sTemplate::Set() with non-primitive values is deprecated\n" + "(node) and will stop working in the next major release.\n", + templ->IsFunctionTemplateInfo() ? "Function" : "Object"); + isolate->PrintStack(stderr, i::Isolate::kPrintStackConcise); + base::DumpBacktrace(); + } i::ApiNatives::AddDataProperty(isolate, templ, Utils::OpenHandle(*name), value_obj, static_cast(attribute)); diff --git a/deps/v8/src/flag-definitions.h b/deps/v8/src/flag-definitions.h index 841d326918f2c5..a338f43b9d53d8 100644 --- a/deps/v8/src/flag-definitions.h +++ b/deps/v8/src/flag-definitions.h @@ -172,6 +172,9 @@ struct MaybeBoolFlag { // #define FLAG FLAG_FULL +DEFINE_BOOL(warn_template_set, true, + "warn on deprecated v8::Template::Set() use") + DEFINE_BOOL(experimental_extras, false, "enable code compiled in via v8_experimental_extra_library_files")