Improve dukglue's includes

This commit is contained in:
Michał Janiszewski 2020-04-25 22:07:38 +02:00 committed by Ted John
parent 2c4cf49fb1
commit a0877d1518
6 changed files with 13 additions and 9 deletions

View File

@ -1,6 +1,8 @@
#pragma once
#include "detail_stack.h"
#include "detail_types.h"
#include "detail_primitive_types.h"
namespace dukglue
{

View File

@ -2,6 +2,7 @@
#include <string>
#include "detail_primitive_types.h"
#include "detail_traits.h"
#include "detail_types.h"

View File

@ -1,5 +1,6 @@
#pragma once
#include <duktape.h>
#include <typeindex>
namespace dukglue
@ -7,7 +8,7 @@ namespace dukglue
namespace detail
{
// same as duk_get_type_name, which is private for some reason *shakes fist*
static const char* get_type_name(duk_int_t type_idx) {
static inline const char* get_type_name(duk_int_t type_idx) {
static const char* names[] = {
"none",
"undefined",
@ -21,7 +22,7 @@ namespace dukglue
"lightfunc"
};
if (type_idx >= 0 && type_idx < sizeof(names) / sizeof(names[0]))
if (type_idx >= 0 && type_idx < static_cast<duk_int_t>(sizeof(names) / sizeof(names[0])))
return names[type_idx];
else
return "unknown";

View File

@ -145,7 +145,7 @@ namespace dukglue {
typedef typename Bare<T>::type BareType;
//typedef DukType<BareType> ThisDukType;
typedef typename DukType<BareType>::IsValueType IsValueType;
static_assert(!IsValueType::value || !std::is_pointer<T>::value, "Cannot return pointer to value type.");
static_assert(!IsValueType::value ||
(!std::is_reference<T>::value || std::is_const<typename std::remove_reference<T>::type>::value),
@ -156,5 +156,3 @@ namespace dukglue {
};
}
}
#include "detail_primitive_types.h"

View File

@ -1,5 +1,6 @@
#pragma once
#include <duktape.h>
#include <sstream>
#include <exception>
@ -37,4 +38,4 @@ public:
duk_pop(ctx);
}
}
};
};

View File

@ -2,6 +2,7 @@
#include "dukexception.h"
#include "detail_traits.h" // for index_tuple/make_indexes
#include "detail_types.h"
// This file has some useful utility functions for users.
// Hopefully this saves you from wading through the implementation.
@ -125,7 +126,7 @@ typename std::enable_if<std::is_void<RetT>::value, RetT>::type dukglue_pcall_met
dukglue::detail::SafeMethodCallData<RetT, ObjT, ArgTs...> data {
&obj, method_name, std::tuple<ArgTs...>(args...), nullptr
};
duk_idx_t rc = duk_safe_call(ctx, &dukglue::detail::call_method_safe<RetT, ObjT, ArgTs...>, (void*) &data, 0, 1);
if (rc != 0)
throw DukErrorException(ctx, rc);
@ -234,11 +235,11 @@ typename std::enable_if<!std::is_void<RetT>::value, RetT>::type dukglue_pcall(du
dukglue::detail::SafeCallData<RetT, ObjT, ArgTs...> data{
&obj, std::tuple<ArgTs...>(args...), &result
};
duk_int_t rc = duk_safe_call(ctx, &dukglue::detail::call_safe<RetT, ObjT, ArgTs...>, (void*) &data, 0, 1);
if (rc != 0)
throw DukErrorException(ctx, rc);
duk_pop(ctx); // remove result from stack
return std::move(result);
}