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) {