diff --git a/include/ircd/js/args.h b/include/ircd/js/args.h new file mode 100644 index 000000000..230ebe5f7 --- /dev/null +++ b/include/ircd/js/args.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2016 Charybdis Development Team + * Copyright (C) 2016 Jason Volk + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice is present in all copies. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once +#define HAVE_IRCD_JS_ARGS_H + +namespace ircd { +namespace js { + +struct args +:JS::CallArgs +{ + value operator[](const size_t &at) const; + + args(const unsigned &argc, JS::Value *const &argv); +}; + +inline +args::args(const unsigned &argc, + JS::Value *const &argv) +:JS::CallArgs{JS::CallArgsFromVp(argc, argv)} +{ +} + +inline value +args::operator[](const size_t &at) +const +{ + if(unlikely(length() <= at)) + throw range_error("Missing required argument #%zu", at); + + return JS::CallArgs::operator[](at); +} + +} // namespace js +} // namespace ircd diff --git a/include/ircd/js/js.h b/include/ircd/js/js.h index 81a438250..0b98103a7 100644 --- a/include/ircd/js/js.h +++ b/include/ircd/js/js.h @@ -76,4 +76,5 @@ inline JSVersion version(const char *const &v) { return JS_StringToVersion(v); #include "del.h" #include "call.h" #include "for_each.h" +#include "args.h" #include "trap.h"