From f2b59a57dce5b738277f02dffa98ffc6c4852b36 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Mon, 31 Oct 2016 12:17:49 -0700 Subject: [PATCH] ircd::js: Variadic arguments for object construction via trap. --- include/ircd/js/trap.h | 21 ++++++++++++++++++++- ircd/js.cc | 18 ------------------ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/include/ircd/js/trap.h b/include/ircd/js/trap.h index ca1e673e2..6a9b38f02 100644 --- a/include/ircd/js/trap.h +++ b/include/ircd/js/trap.h @@ -83,7 +83,7 @@ class trap operator const JSClass &() const { return jsclass(); } operator const JSClass *() const { return &jsclass(); } - object operator()(const object &parent = {}, const object &parent_proto = {}); + template object operator()(const object &parent, args&&...); trap(const std::string &path, const uint32_t &flags = 0); trap(trap &&) = delete; @@ -93,5 +93,24 @@ class trap extern __thread trap *tree; +template +object +trap::operator()(const object &parent, + args&&... a) +{ + object proto(JS_InitClass(*cx, + parent, + object{}, + _class.get(), + nullptr, + 0, + ps, + fs, + nullptr, + nullptr)); + + return JS_New(*cx, proto, vector{std::forward(a)...}); +} + } // namespace js } // namespace ircd diff --git a/ircd/js.cc b/ircd/js.cc index d04442c46..013b0368a 100644 --- a/ircd/js.cc +++ b/ircd/js.cc @@ -472,24 +472,6 @@ catch(const std::exception &e) throw; } -ircd::js::object -ircd::js::trap::operator()(const object &parent, - const object &parent_proto) -{ - object proto(JS_InitClass(*cx, - parent, - parent_proto, - _class.get(), - nullptr, - 0, - ps, - fs, - nullptr, - nullptr)); - - return JS_New(*cx, proto, JS::HandleValueArray::empty()); -} - ircd::js::trap & ircd::js::trap::find(const std::string &path) {