mirror of
https://github.com/dlang/dmd.git
synced 2025-04-28 06:00:13 +03:00
dtoh: emit _d_dynamicArray only when needed (#16397)
This commit is contained in:
parent
ded14a2bb9
commit
dc37b90ffe
23 changed files with 9 additions and 597 deletions
|
@ -104,6 +104,7 @@ void genCppHdrFiles(ref Modules ms)
|
|||
|
||||
// Emit array compatibility because extern(C++) types may have slices
|
||||
// as members (as opposed to function parameters)
|
||||
if (v.hasDArray)
|
||||
buf.writestring(`
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
|
@ -259,11 +260,14 @@ public:
|
|||
OutBuffer* buf;
|
||||
|
||||
/// The generated header uses `real` emitted as `_d_real`?
|
||||
bool hasReal;
|
||||
bool hasReal = false;
|
||||
|
||||
/// The generated header has extern(System) functions,
|
||||
/// which needs support macros in the header
|
||||
bool hasExternSystem;
|
||||
bool hasExternSystem = false;
|
||||
|
||||
/// There are functions taking slices, which need a compatibility struct for C++
|
||||
bool hasDArray = false;
|
||||
|
||||
/// The generated header should contain comments for skipped declarations?
|
||||
const bool printIgnored;
|
||||
|
@ -2082,6 +2086,8 @@ public:
|
|||
{
|
||||
debug (Debug_DtoH) mixin(traceVisit!t);
|
||||
|
||||
hasDArray = true;
|
||||
|
||||
if (t.isConst() || t.isImmutable())
|
||||
buf.writestring("const ");
|
||||
buf.writestring("_d_dynamicArray< ");
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
struct Foo final
|
||||
{
|
||||
int32_t a;
|
||||
|
|
|
@ -14,33 +14,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
class C;
|
||||
|
||||
extern void importFunc();
|
||||
|
|
|
@ -11,33 +11,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
template <typename T, typename U>
|
||||
struct TS final
|
||||
{
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
struct S final
|
||||
{
|
||||
union
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
namespace nameSpace
|
||||
{
|
||||
extern void fn();
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
class ForwardClass;
|
||||
|
||||
class BaseClass
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
struct Outer final
|
||||
{
|
||||
int32_t a;
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
union U1
|
||||
{
|
||||
int32_t a;
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
enum : int32_t { Anon = 10 };
|
||||
|
||||
enum : bool { Anon2 = true };
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
static int32_t const Anon = 10;
|
||||
|
||||
static bool const Anon2 = true;
|
||||
|
|
|
@ -11,33 +11,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
extern int32_t foo();
|
||||
|
||||
extern int32_t* somePtr;
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
struct Child;
|
||||
class Struct;
|
||||
enum class Enum;
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
struct S final
|
||||
{
|
||||
int32_t i;
|
||||
|
|
|
@ -21,33 +21,6 @@ compilable/dtoh_invalid_identifiers.d(145): Warning: function `__attribute__` is
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
extern void register(int32_t* ptr);
|
||||
|
||||
namespace const_cast
|
||||
|
|
|
@ -11,33 +11,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
extern "C" int32_t freeC();
|
||||
|
||||
// Ignored function dtoh_mangling.bar because C++ doesn't support explicit mangling
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
struct Outer final
|
||||
{
|
||||
static Outer* outerPtr;
|
||||
|
|
|
@ -13,33 +13,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
struct S1 final
|
||||
{
|
||||
int32_t a;
|
||||
|
|
|
@ -11,33 +11,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
class ExternDClass;
|
||||
struct ExternDStruct2;
|
||||
struct ExternDStruct3;
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
enum class __c_not_special;
|
||||
extern "C" void fn_long(long __param_0_);
|
||||
|
||||
|
|
|
@ -12,33 +12,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
---
|
||||
*/
|
||||
|
|
|
@ -14,33 +14,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
extern void importFunc();
|
||||
|
||||
// Ignored function dtoh_verbose.foo because of linkage
|
||||
|
|
|
@ -11,33 +11,6 @@ TEST_OUTPUT:
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef CUSTOM_D_ARRAY_TYPE
|
||||
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
|
||||
#else
|
||||
/// Represents a D [] array
|
||||
template<typename T>
|
||||
struct _d_dynamicArray final
|
||||
{
|
||||
size_t length;
|
||||
T *ptr;
|
||||
|
||||
_d_dynamicArray() : length(0), ptr(NULL) { }
|
||||
|
||||
_d_dynamicArray(size_t length_in, T *ptr_in)
|
||||
: length(length_in), ptr(ptr_in) { }
|
||||
|
||||
T& operator[](const size_t idx) {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
|
||||
const T& operator[](const size_t idx) const {
|
||||
assert(idx < length);
|
||||
return ptr[idx];
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32
|
||||
#define EXTERN_SYSTEM_AFTER __stdcall
|
||||
#define EXTERN_SYSTEM_BEFORE
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue