19 #ifndef IRCCD_JS_DUK_HPP
20 #define IRCCD_JS_DUK_HPP
32 #include <string_view>
62 duk_context* context_;
76 stack_guard(duk_context* ctx,
unsigned expected = 0) noexcept;
97 std::unique_ptr<duk_context, void (*)(duk_context*)> handle_;
100 void operator=(
const context&) =
delete;
118 operator duk_context*() noexcept;
125 operator duk_context*() const noexcept;
147 std::string message_;
149 std::string file_name_;
150 unsigned line_number_;
165 std::string file_name,
166 unsigned line_number = 0) noexcept;
173 auto get_name() const noexcept -> const
std::
string&;
180 auto get_message() const noexcept -> const
std::
string&;
194 auto get_file_name() const noexcept -> const
std::
string&;
201 auto get_line_number() const noexcept ->
unsigned;
208 auto what() const noexcept -> const
char* override;
253 template <typename T>
269 template <typename T>
270 auto
push(duk_context* ctx, T&& value) ->
int
272 using Type =
typename std::decay<T>::type;
292 template <
typename T>
293 auto get(duk_context* ctx, duk_idx_t index)
295 using Type =
typename std::decay<T>::type;
313 template <
typename T>
314 auto require(duk_context* ctx, duk_idx_t index)
316 using Type =
typename std::decay<T>::type;
331 int type_{DUK_ERR_ERROR};
332 std::string message_;
342 error(
int type, std::string message) noexcept;
350 error(std::string message) noexcept;
486 template <
typename Error>
487 void raise(duk_context* ctx, Error&&
error)
489 using type = std::decay_t<Error>;
524 static void raise(duk_context* ctx,
const std::exception& ex);
542 static void raise(duk_context* ctx,
const error& ex);
562 static void push(duk_context* ctx,
bool value);
573 static auto get(duk_context* ctx, duk_idx_t index) -> bool;
584 static auto require(duk_context* ctx, duk_idx_t index) -> bool;
604 static void push(duk_context* ctx, duk_double_t value);
615 static auto get(duk_context* ctx, duk_idx_t index) -> duk_double_t;
626 static auto require(duk_context* ctx, duk_idx_t index) -> duk_double_t;
646 static void push(duk_context* ctx, duk_int_t value);
657 static auto get(duk_context* ctx, duk_idx_t index) -> duk_int_t;
668 static auto require(duk_context* ctx, duk_idx_t index) -> duk_int_t;
688 static void push(duk_context* ctx, duk_uint_t value);
699 static auto get(duk_context* ctx, duk_idx_t index) -> duk_uint_t;
710 static auto require(duk_context* ctx, duk_idx_t index) -> duk_uint_t;
730 static void push(duk_context* ctx,
const char* value);
741 static auto get(duk_context* ctx, duk_idx_t index) ->
const char*;
752 static auto require(duk_context* ctx, duk_idx_t index) ->
const char*;
772 static void push(duk_context* ctx,
const std::string& value);
783 static auto get(duk_context* ctx, duk_idx_t index) -> std::string;
794 static auto require(duk_context* ctx, duk_idx_t index) -> std::string;
814 static void push(duk_context* ctx, std::string_view value);
825 static auto get(duk_context* ctx, duk_idx_t index) -> std::string_view;
836 static auto require(duk_context* ctx, duk_idx_t index) -> std::string_view;
846 template <
typename T>
854 static void push(duk_context* ctx,
const std::vector<T>& values)
858 for (std::size_t i = 0; i < values.size(); ++i) {
860 duk_put_prop_index(ctx, -2, i);
871 static auto get(duk_context* ctx, duk_idx_t index) -> std::vector<T>
873 const auto length = duk_get_length(ctx, index);
875 std::vector<T> result;
877 result.reserve(length);
879 for (
auto i = 0U; i < length; ++i) {
880 duk_get_prop_index(ctx, index, i);
RAII based Duktape handler.
Definition: duk.hpp:95
Base ECMAScript error class.
Definition: duk.hpp:329
error(std::string message) noexcept
void create(duk_context *ctx) const
error(int type, std::string message) noexcept
Error in eval() function.
Definition: duk.hpp:373
eval_error(std::string message) noexcept
Value is out of range.
Definition: duk.hpp:390
range_error(std::string message) noexcept
Trying to use a variable that does not exist.
Definition: duk.hpp:407
reference_error(std::string message) noexcept
Stack sanity checker.
Definition: duk.hpp:59
stack_guard(duk_context *ctx, unsigned expected=0) noexcept
Error description.
Definition: duk.hpp:144
stack_info(std::string name, std::string message, std::string stack, std::string file_name, unsigned line_number=0) noexcept
Syntax error in the script.
Definition: duk.hpp:424
syntax_error(std::string message) noexcept
Invalid type given.
Definition: duk.hpp:441
type_error(std::string message) noexcept
URI manipulation failure.
Definition: duk.hpp:458
uri_error(std::string message) noexcept
auto require(duk_context *ctx, duk_idx_t index)
Definition: duk.hpp:314
auto get(duk_context *ctx, duk_idx_t index)
Definition: duk.hpp:293
auto push(duk_context *ctx, T &&value) -> int
Definition: duk.hpp:270
auto get_stack(duk_context *ctx, int index, bool pop=true) -> stack_info
Parent namespace.
Definition: acceptor.hpp:43
static void push(duk_context *ctx, bool value)
static auto get(duk_context *ctx, duk_idx_t index) -> bool
static auto require(duk_context *ctx, duk_idx_t index) -> bool
static auto get(duk_context *ctx, duk_idx_t index) -> const char *
static auto require(duk_context *ctx, duk_idx_t index) -> const char *
static void push(duk_context *ctx, const char *value)
static auto require(duk_context *ctx, duk_idx_t index) -> duk_double_t
static void push(duk_context *ctx, duk_double_t value)
static auto get(duk_context *ctx, duk_idx_t index) -> duk_double_t
static void push(duk_context *ctx, duk_int_t value)
static auto require(duk_context *ctx, duk_idx_t index) -> duk_int_t
static auto get(duk_context *ctx, duk_idx_t index) -> duk_int_t
static void push(duk_context *ctx, duk_uint_t value)
static auto get(duk_context *ctx, duk_idx_t index) -> duk_uint_t
static auto require(duk_context *ctx, duk_idx_t index) -> duk_uint_t
static void push(duk_context *ctx, const std::string &value)
static auto get(duk_context *ctx, duk_idx_t index) -> std::string
static auto require(duk_context *ctx, duk_idx_t index) -> std::string
static void push(duk_context *ctx, std::string_view value)
static auto require(duk_context *ctx, duk_idx_t index) -> std::string_view
static auto get(duk_context *ctx, duk_idx_t index) -> std::string_view
static void push(duk_context *ctx, const std::vector< T > &values)
Definition: duk.hpp:854
static auto get(duk_context *ctx, duk_idx_t index) -> std::vector< T >
Definition: duk.hpp:871
Operations on different types.
Definition: duk.hpp:254