mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 08:42:24 +00:00
Restore use of alloca for string value copies. mingw build fixes. Support Linux subsystem for Windows.
This commit is contained in:
parent
d906629d2a
commit
cf49ec30b9
208 changed files with 575 additions and 544 deletions
|
|
@ -336,7 +336,7 @@ END New;
|
|||
|
||||
|
||||
|
||||
PROCEDURE -closeHandle(h: FileHandle): INTEGER "(INTEGER)CloseHandle((address)h)";
|
||||
PROCEDURE -closeHandle(h: FileHandle): INTEGER "(INTEGER)CloseHandle((HANDLE)(address)h)";
|
||||
|
||||
PROCEDURE Close*(h: FileHandle): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -346,7 +346,7 @@ END Close;
|
|||
|
||||
|
||||
PROCEDURE -byHandleFileInformation "BY_HANDLE_FILE_INFORMATION bhfi";
|
||||
PROCEDURE -getFileInformationByHandle(h: FileHandle): INTEGER "(INTEGER)GetFileInformationByHandle((address)h, &bhfi)";
|
||||
PROCEDURE -getFileInformationByHandle(h: FileHandle): INTEGER "(INTEGER)GetFileInformationByHandle((HANDLE)(address)h, &bhfi)";
|
||||
PROCEDURE -bhfiMtimeHigh(): LONGINT "(LONGINT)bhfi.ftLastWriteTime.dwHighDateTime";
|
||||
PROCEDURE -bhfiMtimeLow(): LONGINT "(LONGINT)bhfi.ftLastWriteTime.dwLowDateTime";
|
||||
PROCEDURE -bhfiVsn(): LONGINT "(LONGINT)bhfi.dwVolumeSerialNumber";
|
||||
|
|
@ -405,7 +405,7 @@ END MTimeAsClock;
|
|||
|
||||
PROCEDURE -largeInteger "LARGE_INTEGER li";
|
||||
PROCEDURE -liLongint(): LONGINT "(LONGINT)li.QuadPart";
|
||||
PROCEDURE -getFileSize(h: FileHandle): INTEGER "(INTEGER)GetFileSizeEx((address)h, &li)";
|
||||
PROCEDURE -getFileSize(h: FileHandle): INTEGER "(INTEGER)GetFileSizeEx((HANDLE)(address)h, &li)";
|
||||
|
||||
PROCEDURE Size*(h: FileHandle; VAR l: LONGINT): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -417,7 +417,7 @@ END Size;
|
|||
|
||||
|
||||
PROCEDURE -readfile (fd: LONGINT; p: SYSTEM.ADDRESS; l: LONGINT; VAR n: SYSTEM.INT32): INTEGER
|
||||
"(INTEGER)ReadFile((address)fd, (void*)p, (DWORD)l, (DWORD*)n, 0)";
|
||||
"(INTEGER)ReadFile((HANDLE)(address)fd, (void*)p, (DWORD)l, (DWORD*)n, 0)";
|
||||
|
||||
PROCEDURE Read*(h: FileHandle; p: SYSTEM.ADDRESS; l: LONGINT; VAR n: LONGINT): ErrorCode;
|
||||
VAR result: INTEGER; lengthread: SYSTEM.INT32;
|
||||
|
|
@ -436,7 +436,7 @@ END ReadBuf;
|
|||
|
||||
|
||||
PROCEDURE -writefile(fd: LONGINT; p: SYSTEM.ADDRESS; l: LONGINT): INTEGER
|
||||
"(INTEGER)WriteFile((address)fd, (void*)(p), (DWORD)l, 0,0)";
|
||||
"(INTEGER)WriteFile((HANDLE)(address)fd, (void*)(p), (DWORD)l, 0,0)";
|
||||
|
||||
PROCEDURE Write*(h: FileHandle; p: SYSTEM.ADDRESS; l: LONGINT): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -445,7 +445,7 @@ END Write;
|
|||
|
||||
|
||||
|
||||
PROCEDURE -flushFileBuffers(h: FileHandle): INTEGER "(INTEGER)FlushFileBuffers((address)h)";
|
||||
PROCEDURE -flushFileBuffers(h: FileHandle): INTEGER "(INTEGER)FlushFileBuffers((HANDLE)(address)h)";
|
||||
|
||||
PROCEDURE Sync*(h: FileHandle): ErrorCode;
|
||||
BEGIN
|
||||
|
|
@ -455,7 +455,7 @@ END Sync;
|
|||
|
||||
|
||||
PROCEDURE -setFilePointerEx(h: FileHandle; o: LONGINT; r: INTEGER; VAR rc: INTEGER)
|
||||
"li.QuadPart=o; *rc = (INTEGER)SetFilePointerEx((address)h, li, 0, (DWORD)r)";
|
||||
"li.QuadPart=o; *rc = (INTEGER)SetFilePointerEx((HANDLE)(address)h, li, 0, (DWORD)r)";
|
||||
|
||||
PROCEDURE -seekset(): INTEGER "FILE_BEGIN";
|
||||
PROCEDURE -seekcur(): INTEGER "FILE_CURRENT";
|
||||
|
|
@ -471,9 +471,9 @@ END Seek;
|
|||
|
||||
|
||||
|
||||
PROCEDURE -setEndOfFile(h: FileHandle): INTEGER "(INTEGER)SetEndOfFile((address)h)";
|
||||
PROCEDURE -setEndOfFile(h: FileHandle): INTEGER "(INTEGER)SetEndOfFile((HANDLE)(address)h)";
|
||||
PROCEDURE -getFilePos(h: FileHandle; VAR r: LONGINT; VAR rc: INTEGER)
|
||||
"LARGE_INTEGER liz = {0}; *rc = (INTEGER)SetFilePointerEx((address)h, liz, &li, FILE_CURRENT); *r = (LONGINT)li.QuadPart";
|
||||
"LARGE_INTEGER liz = {0}; *rc = (INTEGER)SetFilePointerEx((HANDLE)(address)h, liz, &li, FILE_CURRENT); *r = (LONGINT)li.QuadPart";
|
||||
|
||||
PROCEDURE Truncate*(h: FileHandle; limit: LONGINT): ErrorCode;
|
||||
VAR rc: INTEGER; oldpos: LONGINT;
|
||||
|
|
@ -531,8 +531,8 @@ PROCEDURE Exit*(code: INTEGER);
|
|||
BEGIN exit(code) END Exit;
|
||||
|
||||
|
||||
PROCEDURE -errstring(s: ARRAY OF CHAR) 'WriteFile((address)Platform_StdOut, s, s__len-1, 0,0)';
|
||||
PROCEDURE -errc (c: CHAR) 'WriteFile((address)Platform_StdOut, &c, 1, 0,0)';
|
||||
PROCEDURE -errstring(s: ARRAY OF CHAR) 'WriteFile((HANDLE)(address)Platform_StdOut, s, s__len-1, 0,0)';
|
||||
PROCEDURE -errc (c: CHAR) 'WriteFile((HANDLE)(address)Platform_StdOut, &c, 1, 0,0)';
|
||||
PROCEDURE errch(c: CHAR); BEGIN errc(c) END errch;
|
||||
PROCEDURE errln; BEGIN errch(0DX); errch(0AX) END errln;
|
||||
|
||||
|
|
@ -594,9 +594,9 @@ PROCEDURE TestLittleEndian;
|
|||
BEGIN i := 1; SYSTEM.GET(SYSTEM.ADR(i), LittleEndian); END TestLittleEndian;
|
||||
|
||||
|
||||
PROCEDURE -getstdinhandle(): FileHandle "(address)GetStdHandle(STD_INPUT_HANDLE)";
|
||||
PROCEDURE -getstdouthandle(): FileHandle "(address)GetStdHandle(STD_OUTPUT_HANDLE)";
|
||||
PROCEDURE -getstderrhandle(): FileHandle "(address)GetStdHandle(STD_ERROR_HANDLE)";
|
||||
PROCEDURE -getstdinhandle(): FileHandle "(LONGINT)(address)GetStdHandle(STD_INPUT_HANDLE)";
|
||||
PROCEDURE -getstdouthandle(): FileHandle "(LONGINT)(address)GetStdHandle(STD_OUTPUT_HANDLE)";
|
||||
PROCEDURE -getstderrhandle(): FileHandle "(LONGINT)(address)GetStdHandle(STD_ERROR_HANDLE)";
|
||||
PROCEDURE -getpid(): INTEGER "(INTEGER)GetCurrentProcessId()";
|
||||
|
||||
BEGIN
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@
|
|||
// 64 bit system detection
|
||||
|
||||
#if (__SIZEOF_POINTER__ == 8) || defined (_LP64) || defined(__LP64__) || defined(_WIN64)
|
||||
#define __o_64
|
||||
#define o__64
|
||||
#endif
|
||||
|
||||
|
||||
// Declare memcpy in a way compatible with C compilers intrinsic
|
||||
// built in implementations.
|
||||
|
||||
#if defined (__o_64)
|
||||
#if defined (o__64)
|
||||
#if defined(_WIN64)
|
||||
typedef unsigned long long size_t;
|
||||
#else
|
||||
|
|
@ -26,11 +26,12 @@
|
|||
#define _SIZE_T_DEFINED_ // For OpenBSD
|
||||
|
||||
void *memcpy(void *dest, const void *source, size_t size);
|
||||
void *alloca(size_t size);
|
||||
|
||||
|
||||
// Declare fixed size versions of basic intger types
|
||||
|
||||
#if defined (__o_64) && !defined(_WIN64)
|
||||
#if defined (o__64) && !defined(_WIN64)
|
||||
// LP64
|
||||
typedef long int64;
|
||||
typedef unsigned long uint64;
|
||||
|
|
@ -78,7 +79,7 @@ typedef void* SYSTEM_PTR;
|
|||
|
||||
// 'address' is a synonym for an int of pointer size
|
||||
|
||||
#if defined (__o_64)
|
||||
#if defined (o__64)
|
||||
#define address int64
|
||||
#else
|
||||
#define address int32
|
||||
|
|
@ -154,9 +155,13 @@ static inline int __str_cmp(CHAR *x, CHAR *y){
|
|||
|
||||
#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d; LONGINT _i=0,_t=n-1; \
|
||||
while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;}
|
||||
#define __DUP(x, l, t) x=(void*)memcpy((void*)Platform_OSAllocate(l*sizeof(t)),x,l*sizeof(t))
|
||||
#define __DUPARR(v, t) v=(void*)memcpy(v##__copy,v,sizeof(t))
|
||||
#define __DEL(x) Platform_OSFree((address)x)
|
||||
|
||||
//#define __DUP(x, l, t) x=(void*)memcpy((void*)Platform_OSAllocate(l*sizeof(t)),x,l*sizeof(t))
|
||||
//#define __DEL(x) Platform_OSFree((address)x)
|
||||
|
||||
#define __DUP(x, l, t) x=(void*)memcpy(alloca(l*sizeof(t)),x,l*sizeof(t))
|
||||
#define __DEL(x)
|
||||
|
||||
|
||||
/* SYSTEM ops */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#!/bin/sh
|
||||
. ../testenv.sh
|
||||
rm -f aa # Remove LSW binary so it doesn't hide Cygwin binary.
|
||||
$OBECOMP aa.mod -m
|
||||
./aa >result
|
||||
. ../testresult.sh
|
||||
|
|
|
|||
|
|
@ -428,149 +428,163 @@ pos=427 char=O
|
|||
pos=428 char=u
|
||||
pos=429 char=t
|
||||
pos=430 char=.
|
||||
pos=431 char=L
|
||||
pos=432 char=n
|
||||
pos=433 char=;
|
||||
pos=434 char=
|
||||
pos=435 char=
|
||||
pos=436 char=
|
||||
pos=437 char=
|
||||
pos=438 char=
|
||||
pos=439 char=
|
||||
pos=440 char=
|
||||
pos=441 char=
|
||||
pos=442 char=I
|
||||
pos=443 char=F
|
||||
pos=431 char=C
|
||||
pos=432 char=h
|
||||
pos=433 char=a
|
||||
pos=434 char=r
|
||||
pos=435 char=(
|
||||
pos=436 char=0
|
||||
pos=437 char=A
|
||||
pos=438 char=X
|
||||
pos=439 char=)
|
||||
pos=440 char=;
|
||||
pos=441 char=
|
||||
pos=442 char=
|
||||
pos=443 char=
|
||||
pos=444 char=
|
||||
pos=445 char=i
|
||||
pos=445 char=
|
||||
pos=446 char=
|
||||
pos=447 char==
|
||||
pos=447 char=
|
||||
pos=448 char=
|
||||
pos=449 char=2
|
||||
pos=450 char=1
|
||||
pos=451 char=9
|
||||
pos=452 char=0
|
||||
pos=453 char=6
|
||||
pos=454 char=
|
||||
pos=455 char=T
|
||||
pos=456 char=H
|
||||
pos=457 char=E
|
||||
pos=458 char=N
|
||||
pos=459 char=
|
||||
pos=460 char=
|
||||
pos=449 char=I
|
||||
pos=450 char=F
|
||||
pos=451 char=
|
||||
pos=452 char=i
|
||||
pos=453 char=
|
||||
pos=454 char==
|
||||
pos=455 char=
|
||||
pos=456 char=2
|
||||
pos=457 char=1
|
||||
pos=458 char=9
|
||||
pos=459 char=0
|
||||
pos=460 char=6
|
||||
pos=461 char=
|
||||
pos=462 char=
|
||||
pos=463 char=
|
||||
pos=464 char=
|
||||
pos=465 char=
|
||||
pos=466 char=
|
||||
pos=462 char=T
|
||||
pos=463 char=H
|
||||
pos=464 char=E
|
||||
pos=465 char=N
|
||||
pos=466 char=
|
||||
pos=467 char=
|
||||
pos=468 char=
|
||||
pos=469 char=O
|
||||
pos=470 char=u
|
||||
pos=471 char=t
|
||||
pos=472 char=.
|
||||
pos=473 char=S
|
||||
pos=474 char=t
|
||||
pos=475 char=r
|
||||
pos=476 char=i
|
||||
pos=477 char=n
|
||||
pos=478 char=g
|
||||
pos=479 char=(
|
||||
pos=480 char="
|
||||
pos=481 char=2
|
||||
pos=482 char=1
|
||||
pos=483 char=9
|
||||
pos=484 char=0
|
||||
pos=485 char=6
|
||||
pos=486 char="
|
||||
pos=487 char=)
|
||||
pos=488 char=;
|
||||
pos=489 char=
|
||||
pos=490 char=O
|
||||
pos=491 char=u
|
||||
pos=492 char=t
|
||||
pos=493 char=.
|
||||
pos=494 char=L
|
||||
pos=495 char=n
|
||||
pos=496 char=;
|
||||
pos=497 char=
|
||||
pos=498 char=
|
||||
pos=499 char=
|
||||
pos=500 char=
|
||||
pos=501 char=
|
||||
pos=502 char=
|
||||
pos=503 char=
|
||||
pos=504 char=
|
||||
pos=505 char=
|
||||
pos=506 char=
|
||||
pos=507 char=(
|
||||
pos=508 char=*
|
||||
pos=509 char=P
|
||||
pos=510 char=l
|
||||
pos=511 char=a
|
||||
pos=512 char=t
|
||||
pos=513 char=f
|
||||
pos=514 char=o
|
||||
pos=515 char=r
|
||||
pos=516 char=m
|
||||
pos=517 char=.
|
||||
pos=518 char=D
|
||||
pos=519 char=e
|
||||
pos=520 char=l
|
||||
pos=521 char=a
|
||||
pos=522 char=y
|
||||
pos=523 char=(
|
||||
pos=524 char=1
|
||||
pos=525 char=0
|
||||
pos=526 char=0
|
||||
pos=527 char=0
|
||||
pos=528 char=0
|
||||
pos=529 char=)
|
||||
pos=530 char=;
|
||||
pos=531 char=*
|
||||
pos=532 char=)
|
||||
pos=533 char=
|
||||
pos=534 char=
|
||||
pos=535 char=
|
||||
pos=536 char=
|
||||
pos=537 char=
|
||||
pos=538 char=
|
||||
pos=539 char=
|
||||
pos=540 char=
|
||||
pos=541 char=E
|
||||
pos=542 char=N
|
||||
pos=543 char=D
|
||||
pos=469 char=
|
||||
pos=470 char=
|
||||
pos=471 char=
|
||||
pos=472 char=
|
||||
pos=473 char=
|
||||
pos=474 char=
|
||||
pos=475 char=
|
||||
pos=476 char=O
|
||||
pos=477 char=u
|
||||
pos=478 char=t
|
||||
pos=479 char=.
|
||||
pos=480 char=S
|
||||
pos=481 char=t
|
||||
pos=482 char=r
|
||||
pos=483 char=i
|
||||
pos=484 char=n
|
||||
pos=485 char=g
|
||||
pos=486 char=(
|
||||
pos=487 char="
|
||||
pos=488 char=2
|
||||
pos=489 char=1
|
||||
pos=490 char=9
|
||||
pos=491 char=0
|
||||
pos=492 char=6
|
||||
pos=493 char="
|
||||
pos=494 char=)
|
||||
pos=495 char=;
|
||||
pos=496 char=
|
||||
pos=497 char=O
|
||||
pos=498 char=u
|
||||
pos=499 char=t
|
||||
pos=500 char=.
|
||||
pos=501 char=C
|
||||
pos=502 char=h
|
||||
pos=503 char=a
|
||||
pos=504 char=r
|
||||
pos=505 char=(
|
||||
pos=506 char=0
|
||||
pos=507 char=A
|
||||
pos=508 char=X
|
||||
pos=509 char=)
|
||||
pos=510 char=;
|
||||
pos=511 char=
|
||||
pos=512 char=
|
||||
pos=513 char=
|
||||
pos=514 char=
|
||||
pos=515 char=
|
||||
pos=516 char=
|
||||
pos=517 char=
|
||||
pos=518 char=
|
||||
pos=519 char=
|
||||
pos=520 char=
|
||||
pos=521 char=(
|
||||
pos=522 char=*
|
||||
pos=523 char=P
|
||||
pos=524 char=l
|
||||
pos=525 char=a
|
||||
pos=526 char=t
|
||||
pos=527 char=f
|
||||
pos=528 char=o
|
||||
pos=529 char=r
|
||||
pos=530 char=m
|
||||
pos=531 char=.
|
||||
pos=532 char=D
|
||||
pos=533 char=e
|
||||
pos=534 char=l
|
||||
pos=535 char=a
|
||||
pos=536 char=y
|
||||
pos=537 char=(
|
||||
pos=538 char=1
|
||||
pos=539 char=0
|
||||
pos=540 char=0
|
||||
pos=541 char=0
|
||||
pos=542 char=0
|
||||
pos=543 char=)
|
||||
pos=544 char=;
|
||||
pos=545 char=
|
||||
pos=546 char=
|
||||
pos=547 char=
|
||||
pos=545 char=*
|
||||
pos=546 char=)
|
||||
pos=547 char=
|
||||
pos=548 char=
|
||||
pos=549 char=
|
||||
pos=550 char=E
|
||||
pos=551 char=N
|
||||
pos=552 char=D
|
||||
pos=553 char=;
|
||||
pos=554 char=
|
||||
pos=555 char=
|
||||
pos=556 char=
|
||||
pos=557 char=E
|
||||
pos=558 char=N
|
||||
pos=559 char=D
|
||||
pos=560 char=
|
||||
pos=561 char=E
|
||||
pos=562 char=N
|
||||
pos=563 char=D
|
||||
pos=564 char=
|
||||
pos=565 char=i
|
||||
pos=566 char=s
|
||||
pos=567 char=p
|
||||
pos=568 char=t
|
||||
pos=569 char=e
|
||||
pos=570 char=s
|
||||
pos=571 char=t
|
||||
pos=572 char=.
|
||||
pos=573 char= | ||||