| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 
 | /* Generated by Nim Compiler v0.16.0 */
/*   (c) 2017 Andreas Rumpf */
/* The generated code is subject to the original license. */
#define NIM_INTBITS 32
#include "nimbase.h"
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <time.h>
#include <sys/mman.h>
#undef linux
typedef struct Memfile_j4SnXNrJDFBxAz4BlbM9aIQ Memfile_j4SnXNrJDFBxAz4BlbM9aIQ;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
struct  Memfile_j4SnXNrJDFBxAz4BlbM9aIQ  {
void* mem;
NI size;
int handle;
};
typedef NU8 Tnimkind_jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 Tnimtypeflag_v8QUszD1sWlSIWZz7mC4bQ_Set;
typedef N_NIMCALL_PTR(void, TY_ojoeKfW4VYIm36I9cpDTQIg) (void* p0, NI op0);
typedef N_NIMCALL_PTR(void*, TY_WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p0);
struct  TNimType  {
NI size;
Tnimkind_jIBKr1ejBgsfM33Kxw4j7A kind;
Tnimtypeflag_v8QUszD1sWlSIWZz7mC4bQ_Set flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY_ojoeKfW4VYIm36I9cpDTQIg marker;
TY_WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 Tnimnodekind_unfNsxrcATrufDZmpBq4HQ;
struct  TNimNode  {
Tnimnodekind_unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NU8 Filemode_fVUBHvW79bXUw1j55Oo9avSQ;
N_NOINLINE(void, raiseoserror_K9a7YBjj81Bse0N0Fg7MFIA)(NI32 errorcode0, NimStringDesc* additionalinfo0);
N_NIMCALL(NI32, oslasterror_pMOMIZAQaKFp1XoL58mjVg)(void);
TNimType NTI_j4SnXNrJDFBxAz4BlbM9aIQ;
extern TNimType NTI_vr5DoT1jILTGdRlYv1OYpw;
extern TNimType NTI_rR5Bzr1D5krxoo1NcNyeMA;
extern TNimType NTI_nlCscttRCss70IBTyuBqnA;
STRING_LITERAL(T_mFfhe8Jm7Jqn2Znr3841fw_3, "", 0);
N_NIMCALL(Memfile_j4SnXNrJDFBxAz4BlbM9aIQ, open_nPWGSMV9cqpdKyxlHHo9ay8A)(NimStringDesc* filename0, Filemode_fVUBHvW79bXUw1j55Oo9avSQ mode0, NI mappedsize0, NI offset0, NI newfilesize0) {
	Memfile_j4SnXNrJDFBxAz4BlbM9aIQ result0;
	NIM_BOOL readonly0;
	int flags0;
	int LOC53;
	NI32 LOC59;
	memset((void*)(&result0), 0, sizeof(result0));
	readonly0 = (mode0 == ((Filemode_fVUBHvW79bXUw1j55Oo9avSQ) 0));
	{
		if (!readonly0) goto LA3;
		flags0 = O_RDONLY;
	}
	goto LA1;
	LA3: ;
	{
		flags0 = O_RDWR;
	}
	LA1: ;
	{
		NI32 permissionsmode0;
		if (!!((newfilesize0 == ((NI) -1)))) goto LA8;
		flags0 = (NI32)((NI32)(flags0 | O_CREAT) | O_TRUNC);
		permissionsmode0 = (NI32)(S_IRUSR | S_IWUSR);
		result0.handle = open(filename0->data, flags0, permissionsmode0);
	}
	goto LA6;
	LA8: ;
	{
		result0.handle = open(filename0->data, flags0);
	}
	LA6: ;
	{
		NI32 LOC20;
		if (!(result0.handle == ((NI32) -1))) goto LA13;
		result0.mem = NIM_NIL;
		result0.size = ((NI) 0);
		{
			int LOC19;
			if (!!((result0.handle == ((NI32) 0)))) goto LA17;
			LOC19 = (int)0;
			LOC19 = close(result0.handle);
		}
		LA17: ;
		LOC20 = (NI32)0;
		LOC20 = oslasterror_pMOMIZAQaKFp1XoL58mjVg();
		raiseoserror_K9a7YBjj81Bse0N0Fg7MFIA(LOC20, ((NimStringDesc*) &T_mFfhe8Jm7Jqn2Znr3841fw_3));
	}
	LA13: ;
	{
		if (!!((newfilesize0 == ((NI) -1)))) goto LA23;
		{
			int LOC27;
			NI32 LOC35;
			LOC27 = (int)0;
			LOC27 = ftruncate(result0.handle, ((off_t) (newfilesize0)));
			if (!(LOC27 == ((NI32) -1))) goto LA28;
			result0.mem = NIM_NIL;
			result0.size = ((NI) 0);
			{
				int LOC34;
				if (!!((result0.handle == ((NI32) 0)))) goto LA32;
				LOC34 = (int)0;
				LOC34 = close(result0.handle);
			}
			LA32: ;
			LOC35 = (NI32)0;
			LOC35 = oslasterror_pMOMIZAQaKFp1XoL58mjVg();
			raiseoserror_K9a7YBjj81Bse0N0Fg7MFIA(LOC35, ((NimStringDesc*) &T_mFfhe8Jm7Jqn2Znr3841fw_3));
		}
		LA28: ;
	}
	LA23: ;
	{
		if (!!((mappedsize0 == ((NI) -1)))) goto LA38;
		result0.size = mappedsize0;
	}
	goto LA36;
	LA38: ;
	{
		struct stat stat0;
		memset((void*)(&stat0), 0, sizeof(stat0));
		{
			int LOC43;
			LOC43 = (int)0;
			LOC43 = fstat(result0.handle, (&stat0));
			if (!!((LOC43 == ((NI32) -1)))) goto LA44;
			result0.size = ((NI) (stat0.st_size));
		}
		goto LA41;
		LA44: ;
		{
			NI32 LOC52;
			result0.mem = NIM_NIL;
			result0.size = ((NI) 0);
			{
				int LOC51;
				if (!!((result0.handle == ((NI32) 0)))) goto LA49;
				LOC51 = (int)0;
				LOC51 = close(result0.handle);
			}
			LA49: ;
			LOC52 = (NI32)0;
			LOC52 = oslasterror_pMOMIZAQaKFp1XoL58mjVg();
			raiseoserror_K9a7YBjj81Bse0N0Fg7MFIA(LOC52, ((NimStringDesc*) &T_mFfhe8Jm7Jqn2Znr3841fw_3));
		}
		LA41: ;
	}
	LA36: ;
	LOC53 = (int)0;
	{
		if (!readonly0) goto LA56;
		LOC53 = PROT_READ;
	}
	goto LA54;
	LA56: ;
	{
		LOC53 = (NI32)(PROT_READ | PROT_WRITE);
	}
	LA54: ;
	LOC59 = (NI32)0;
	{
		if (!readonly0) goto LA62;
		LOC59 = (NI32)(MAP_PRIVATE | MAP_POPULATE);
	}
	goto LA60;
	LA62: ;
	{
		LOC59 = (NI32)(MAP_SHARED | MAP_POPULATE);
	}
	LA60: ;
	result0.mem = mmap(NIM_NIL, result0.size, LOC53, LOC59, result0.handle, ((off_t) (offset0)));
	{
		NI32 LOC74;
		if (!(result0.mem == ((void*) (MAP_FAILED)))) goto LA67;
		result0.mem = NIM_NIL;
		result0.size = ((NI) 0);
		{
			int LOC73;
			if (!!((result0.handle == ((NI32) 0)))) goto LA71;
			LOC73 = (int)0;
			LOC73 = close(result0.handle);
		}
		LA71: ;
		LOC74 = (NI32)0;
		LOC74 = oslasterror_pMOMIZAQaKFp1XoL58mjVg();
		raiseoserror_K9a7YBjj81Bse0N0Fg7MFIA(LOC74, ((NimStringDesc*) &T_mFfhe8Jm7Jqn2Znr3841fw_3));
	}
	LA67: ;
	return result0;
}
N_NIMCALL(void, close_pdDAO8UZUr4A4NczjpWmdA)(Memfile_j4SnXNrJDFBxAz4BlbM9aIQ* f0) {
	NIM_BOOL error0;
	NI32 lasterr0;
	error0 = NIM_FALSE;
	lasterr0 = (NI32)0;
	{
		int LOC5;
		NIM_BOOL LOC6;
		int LOC7;
		if (!!(((*f0).handle == ((NI32) 0)))) goto LA3;
		LOC5 = (int)0;
		LOC5 = munmap((*f0).mem, (*f0).size);
		error0 = !((LOC5 == ((NI32) 0)));
		lasterr0 = oslasterror_pMOMIZAQaKFp1XoL58mjVg();
		LOC6 = (NIM_BOOL)0;
		LOC7 = (int)0;
		LOC7 = close((*f0).handle);
		LOC6 = !((LOC7 == ((NI32) 0)));
		if (LOC6) goto LA8;
		LOC6 = error0;
		LA8: ;
		error0 = LOC6;
	}
	LA3: ;
	(*f0).size = ((NI) 0);
	(*f0).mem = NIM_NIL;
	(*f0).handle = ((int) 0);
	{
		if (!error0) goto LA11;
		raiseoserror_K9a7YBjj81Bse0N0Fg7MFIA(lasterr0, ((NimStringDesc*) &T_mFfhe8Jm7Jqn2Znr3841fw_3));
	}
	LA11: ;
}
NIM_EXTERNC N_NOINLINE(void, stdlib_memfilesInit000)(void) {
}
NIM_EXTERNC N_NOINLINE(void, stdlib_memfilesDatInit000)(void) {
static TNimNode* T_mFfhe8Jm7Jqn2Znr3841fw_2[3];
static TNimNode T_mFfhe8Jm7Jqn2Znr3841fw_0[4];
NTI_j4SnXNrJDFBxAz4BlbM9aIQ.size = sizeof(Memfile_j4SnXNrJDFBxAz4BlbM9aIQ);
NTI_j4SnXNrJDFBxAz4BlbM9aIQ.kind = 18;
NTI_j4SnXNrJDFBxAz4BlbM9aIQ.base = 0;
NTI_j4SnXNrJDFBxAz4BlbM9aIQ.flags = 3;
T_mFfhe8Jm7Jqn2Znr3841fw_2[0] = &T_mFfhe8Jm7Jqn2Znr3841fw_0[1];
T_mFfhe8Jm7Jqn2Znr3841fw_0[1].kind = 1;
T_mFfhe8Jm7Jqn2Znr3841fw_0[1].offset = offsetof(Memfile_j4SnXNrJDFBxAz4BlbM9aIQ, mem);
T_mFfhe8Jm7Jqn2Znr3841fw_0[1].typ = (&NTI_vr5DoT1jILTGdRlYv1OYpw);
T_mFfhe8Jm7Jqn2Znr3841fw_0[1].name = "mem";
T_mFfhe8Jm7Jqn2Znr3841fw_2[1] = &T_mFfhe8Jm7Jqn2Znr3841fw_0[2];
T_mFfhe8Jm7Jqn2Znr3841fw_0[2].kind = 1;
T_mFfhe8Jm7Jqn2Znr3841fw_0[2].offset = offsetof(Memfile_j4SnXNrJDFBxAz4BlbM9aIQ, size);
T_mFfhe8Jm7Jqn2Znr3841fw_0[2].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_mFfhe8Jm7Jqn2Znr3841fw_0[2].name = "size";
T_mFfhe8Jm7Jqn2Znr3841fw_2[2] = &T_mFfhe8Jm7Jqn2Znr3841fw_0[3];
T_mFfhe8Jm7Jqn2Znr3841fw_0[3].kind = 1;
T_mFfhe8Jm7Jqn2Znr3841fw_0[3].offset = offsetof(Memfile_j4SnXNrJDFBxAz4BlbM9aIQ, handle);
T_mFfhe8Jm7Jqn2Znr3841fw_0[3].typ = (&NTI_nlCscttRCss70IBTyuBqnA);
T_mFfhe8Jm7Jqn2Znr3841fw_0[3].name = "handle";
T_mFfhe8Jm7Jqn2Znr3841fw_0[0].len = 3; T_mFfhe8Jm7Jqn2Znr3841fw_0[0].kind = 2; T_mFfhe8Jm7Jqn2Znr3841fw_0[0].sons = &T_mFfhe8Jm7Jqn2Znr3841fw_2[0];
NTI_j4SnXNrJDFBxAz4BlbM9aIQ.node = &T_mFfhe8Jm7Jqn2Znr3841fw_0[0];
}
 |