mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-26 13:51:50 +03:00
54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
#if defined(WIN32) || defined(_WIN32) || \
|
|
defined(__WIN32) && !defined(__CYGWIN__)
|
|
#include <BaseTsd.h>
|
|
#include <windows.h>
|
|
typedef SSIZE_T ssize_t;
|
|
#endif
|
|
#ifndef _WIN32
|
|
#include <unistd.h>
|
|
#endif
|
|
|
|
typedef char *String;
|
|
typedef char *Pattern;
|
|
|
|
#if defined NDEBUG
|
|
#define CHK_INDEX(i, n)
|
|
#else
|
|
|
|
#if defined(WIN32) || defined(_WIN32) || \
|
|
defined(__WIN32) && !defined(__CYGWIN__)
|
|
// The %zd format flag doesn't seem to work on Windows?
|
|
#define CHK_INDEX_FORMAT_STRING ":%u: bad index: %ld < %ld\n"
|
|
#else
|
|
#define CHK_INDEX_FORMAT_STRING ":%u: bad index: %zd < %zd\n"
|
|
#endif
|
|
|
|
#define CHK_INDEX(i, n) \
|
|
do { \
|
|
size_t __si = (size_t)i; \
|
|
size_t __ni = (size_t)n; \
|
|
if (!(__si < __ni)) { \
|
|
printf(__FILE__ CHK_INDEX_FORMAT_STRING, __LINE__, (ssize_t)i, \
|
|
(ssize_t)n); \
|
|
abort(); \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
// Array
|
|
typedef struct {
|
|
size_t len;
|
|
size_t capacity;
|
|
void *data;
|
|
} Array;
|
|
|
|
// Lambdas
|
|
typedef struct {
|
|
void *callback;
|
|
void *env;
|
|
void *delete;
|
|
void *copy;
|
|
} Lambda;
|
|
|
|
typedef void *LambdaEnv;
|