[changed]
- array descriptor contains new 'flags' field. Careful, breaks binary compatibility plus chicken-egg problem to build fbc.
- fbc '-version' reports build date in yyyy-mm-dd format (aka build date iso)
- updated SQLite headers for binding to SQLite 3.34.0
- updated BASS headers for binding to BASS 2.4.15
- updated PostgreSQL headers for binding to PostgreSQL 12.0
- updated curl headers for binding to curl 7.73.0
- updated SDL1.2 bindings to SDL_gfx 2.0.26
- updated SDL2 bindings to SDL2 2.0.14, SDL2_image 2.0.5, SDL2_mixer 2.0.4, SDL2_ttf 2.0.15
- updated LLVM and Clang bindings to 5.0.0git-fb0acea
- updated Chipmunk2D binding to 7.0.3
- updated cryptlib binding to 3.4.5
- updated DevIL binding to 1.8.0
- updated fastcgi to fcgi-2.4.1-SNAP-0910052249 binding (no changes from fcgi-2.4.1-SNAP-031111212
- updated libffi binding to 3.3 (used by threadcall)
- updated libjit binding to 0.1.4
- updated bzip2 binding to 1.0.8 (no change from 1.0.6)
- refreshed ncurses-5.9 binding
- refreshed mediainfo_0.7.77 binding
- warning level for all warnings is increased by 1. Default warning level is 1. Previously, default warning level was 0 and some warnings had level of -1.
- reverted changes due sf.net #893: invalid suffixes due to '-lang fb'
- reverted changes due sf.net #832: Fix bug allowing QB style suffixes on all keywords, regardless of -lang
- suffixes in '-lang fb' reverted to fbc-1.05.0 behaviours
- sf.net #908: check visibility for overloaded operators FOR, NEXT, and STEP
- sf.net #909, #832, #866 reverted error on suffix in lang fb dialect
- sf.net #832: warn on suffixes for all built-in keywords.
- 'Suffix ignored' warning in -lang fb instead of errors
- macros with parameters can now be invoked without using parentheses around the arguments using '#macro name ? (arg)' definition syntax
- rtlib: internal fb_MemCopyClear() argument types changed to expect unsigned lengths (UINTEGER => size_t)
- rtlib: internal changes to API: fb_ArrayErase(), fb_ArrayClear(), fb_ArrayClearObj()
- rtlib: internal removal of unused / legacy functions: fb_ArrayRedim(), fb_ArrayRedimPresv()
- rtlib: internal removal of unused / legacy functions: fb_ArraySetDesc(), temporay descriptor functions and structs
- github #256: gfxlib2: enable frame buffer on linux-arm targets
- gfxlib2: X11 driver - set the window title for both the frame window and the client window
- rtlib: RANDOMIZE RND_REAL for real random number generator now fills a buffer (624 ulongs) and RND iterates the buffer
- rtlib: refactor math_rnd.c internals for readability
- fbcunit: update to version 1.0
- sf.net #924: fbc: built-in for RGB() and RGBA() return ulong
- gfxlib2: POINT returns ULONG
- sf.net #927: PUT custom method expects function(ulong,ulong,any pr) as ulong callback function
- fbc: double the minimum and default stacksize on 64-bit to 64Kb and 2048Kb respectively.
- fbc: internal changes to optimize away unused call results
- github #203: allow casts of addresses on static initializers
- only write debug line information for statements and don't write comments / empty lines / directives for top level source code in assembly debug output
- optimize byref 'm += s' string concatenations to fb_StrConcatByref() which will check for same string descriptor at run-time which can't be determined at compile time for byref parameters.
- github #298: allow command line options passed to as, gcc, ld to be longer than 128 characters by using string types internally
- sf.net #923: implicitly emit the deleting destructor for extern "c++" mangling for better g++ ABI compatibility
- Add new gfxlib2 API's fb_GfxScreenInfo32() and fb_GfxScreenInfo64()
- Change overload to SCREENINFO( byref as long = 0, byref as long = 0, byref as long = 0, byref as long = 0, byref as long = 0, byref as long = 0, byref as string = "" )
- Add overload for SCREENINFO( byref as longint, byref as longint, byref as longint = 0, byref as longint = 0, byref as longint = 0, byref as longint = 0, byref as string = "" )
- Add new gflib2 API's fb_GfxImageInfo32() and fb_GfxImageInfo64()
- Change overload to IMAGEINFO( byval as const any ptr, byref as long = 0, byref as long = 0, byref as long = 0, byref as long = 0, byref as any ptr = 0, byref as longint = 0 ) as long
- Add overload for IMAGEINFO( byval as const any ptr, byref as longint, byref as longint, byref as longint = 0, byref as longint = 0, byref as any ptr = 0, byref as longint = 0 ) as long
- Add new gfxlib2 API's fb_GfxControl_i32() and fb_GfxControl_i64()
- Change overload for SCREENCONTROL( byval as const long, byref as long = -2147483648, byref as long = -2147483648, byref as long = -2147483648, byref as long = -2147483648 )
- Add overload for SCREENCONTROL( byval as const long, byref as longint, byref as longint = -2147483648, byref as longint = -2147483648, byref as longint = -2147483648 )
- github #311: index argument in __FB_ARG_EXTRACT__( index, args... ) is evaluated as constant (Skyfish)
[added]
- extern "rtlib": respects the parent namespace, uses default fb calling convention and C style name mangling
- array descriptor 'flags' field to track fixed length, fixed dimension, dimTb() size.
- __FB_BUILD_DATE_ISO__ intrinsic define to return fbc build date in 'yyyy-mm-dd' format
- __FB_BUILD_SHA1__ intrinsic define to return the compiler's source code commit sha-1, (if known)
- '-print sha-1' to print the compiler's source code commit sha-1, (if known)
- makefile: 'FBSHA1=1' makefile configuration option to determine the current repo commit sha-1 from git
- makefile: 'FBSHA1=some-sha-1' makefile configuration option to explicit set the repo commit sha-1
- makefile: '-d FBSHA1="some-sha-1"' compiler option to set the value of '__FB_BUILD_SHA1__' when building fbc
- rtlib: inc/file.bi:FileFlush() function, usable for file, PIPE, CONS, and ERR streams opened for BINARY, RANDOM, OUTPUT, APPEND.
- rtlib: inc/file.bi;FileSetEof() function, to adjust size of open file
- sf.net feature request #293: allow len/sizeof/typeof for UDT members without expression
- gfxlib: added Direct2D driver, preferred driver on newer systems. DirectX driver is still fallback for older systems (adeyblue)
- fbc: add builtin function fb_MemMove() alias "memmove"
- fbc: add builtin function fb_MemCopy() alias "memcpy" (was previously removed in an older version of fbc)
- ./inc/fbc-int/memory.bi - fbc API for low level memory operations allocate, callocate, reallocate, deallocate, clear, memcopy, memmove, copyclear
- '-w suffix' or '-w pedantic' command line option enabled 'Suffix ignored' warning for built-in in string functions
- __FB_UNIQUEID_PUSH__(), __FB_UNIQUEID__(), __FB_UNIQUEID_POP__(), __FB_ARG_LEFTOF__(), __FB_ARG_RIGHTOF__(), __FB_JOIN__() builtin macros
- __FB_ARG_COUNT__() builtin macro
- __thiscall keyword to specify the 'thiscall' calling convention (-gen gcc only)
- __FB_QUOTE__(), __FB_UNQUOTE__(), __FB_EVAL__() builtin macros
- rtlib: REDIM [PRESERVE] will generate run time error if attempting to resize static (fixed length) arrays.
- gas64 emitter for x86_64 (SARG), added '-gen gas64' command line option to select
- github #256: gfxlib2: add vga16_blitter for linux-arm targets to pack 2 pixels per byte and write to linear frame buffer
- ./inc/fbc-int/math.bi - fbc API for rnd, rnd32, randomize, expose some random number generator internals
- ./inc/fbmath.bi - add random number generators fb.rndfast32, fb.rndmsws32, fb.rndsquares32, fb.rndpcg32, fb.rndxoroshiro128
- add THREADSELF in ./inc/fbthread.bi to return the thread id of the current thread (adeyblue)
- makefile: add arm and aarch64 targets to the bootstrap package
- release: add arm and aarch64 targets as an option to the contrib/release.build.sh script
- emscripten port (WIP, v1ctor & angros47)
- bindings to SoLoud audio library (soloud_c.bi: C API only)
- bindings to raylib-3.0.0 library (raylib.bi and raymath.bi)
- gas64: add debugging information for -g -gen gas64 for user code for FBdebugger only (SARG)
- __FB_ARG_EXTRACT__( index, args... ) builtin macro (adeyblue)
- __FB_X86__ intrinsic define on x86 and x86_64
- added warning 'FOR counter variable is unable to exceed limit value' on constant end value for loops to help avoid infinite loops, e.g. for i as ubyte = 0 to 255
- internal rtlib function fb_LEFTSELF( string, n ) to reduce the size of a string without reallocating the buffer
- added GFX_SCREEN_EXIT = &h80000000l constant to fbgfx.bi - used with Screen 0 (closing any graphics window and preserving the console window content)
- github #309: In macro/define's use '##_' to escape line continuation character '_' to allow multiple lines of macro expanded code to be combined into a single statement.(Skyfish)
[fixed]
- makefile: under MSYS2 (and friends), TARGET_ARCH is now identified from shell's default target architecture instead of shell's host architecture
- sf.net #904; gcc backend: pass '-Wno-format' to prevent format string errors in gcc 9.x (enabled by default with -Wall)
- sf.net #910: cast(string, variable) can cause fbc to segfault (infinite recursion), due to misplaced const & non-const casting
- sf.net #898: fbc win gfxlib DirectX driver failed to initialize on 64-bit, due to incorrect construction of DIDATAFORMAT for keyboard device (macko17)
- rtlib: potential buffer overflow in sys_getshortpath.c (macko17)
- sf.net #404: len/sizeof type parsing eats namespace prefix (namespace prefix is now preserved)
- sf.net #718: len/sizeof type parsing disambiguates between type and variable having same name
- github #205: fix rtlib realloc memory leaks in 'redim preserve' and 'fb_hGetLocaleInfo' (adeyblue)
- github #205: fix rtlib realloc memory leaks and malloc null ptrs in utf_conv.bi CharToUTF, 'WCharToUTF, UTFToChar, UTFToWChar, and related functions
- github #205: fix rtlib potential malloc null ptr access in dev file read/write methods
- default new, new[] operator (allocate) after #undef allocate caused compiler crash
- default delete, delete[] operator (deallocate) after #undef deallocate caused compiler crash
- windows GDI gfxlib driver now displays double scanline screen modes correctly (screen 2 &
, rather than half screen (adeyblue)
- sf.net #921: gfxlib: horizontal line drawing on 8-bit image was using wrong bpp
- oGLfbGFX: opengl driver was leaking thread handle under 'screencontrol fb.SET_GL_2D_MODE, fb.OGL_2D_AUTO_SYNC'
- oGLfbGFX: prevent opengl mode and scale from changing until next mode is set
- sf.net #908: visibility / access rights of overload For/Next/Step operators not taken into account by for...next statement
- sf.net #906: #error on line 2 not reported if immediately following #error on line 1
- rtlib: ERASE - check for static (fixed length) plain, string, and object arrays passed to ERASE; clear only if array is static, and free memory if dynamic
- rtlib: allow reading/writing data larger than 2GB with GET # / PUT # [WIP]
- sf.net #882: error on REDIM udt.field(expr) if default constructor has no access
- github #246: rtlib leaks thread local data, fixed by adding TLS destructors (adeyblue)
- sf.net #918: pcopy (console) bug when copying large console buffers, windows only (adeyblue)
- github #216: function getMouse() seems broken on Win10 when using the Console Mode (screen 0), fixed by turn off the QuickEdit console mode during GetMouse (adeyblue)
- github #258: on windows directx and gdi drivers, only show window after initialisation is complete (adeyblue)
- sf.net #925: CSIGN/CUNSG preserve size when converting pointers on 64-bit and implicit conversion of STEP value in FOR...NEXT statement
- github #122: gfxlib2: linux GFX_NO_FRAME + GFX_OPENGL freezing at exit due to a dead lock between exit routines
- sf.net #914: threadsafe RND() and RANDOMIZE() by adding a mutex
- use the multi-byte & wide character functions wctombs() & mbtowcs() when converting between string and wstring (Skyfish)
- sf.net #568: asm error assigning 16-bit constant to 32-bit var, invalid use of movsx instruction on immediate (short => long)
- fbc: internal cThreadCallFunc() was using wrong function to get the procedures return type
- fbc: read objinfo for elf format files on arm32 and arm64 (aarch64) to allow automatic options and linking of libraries
- fbc: name mangling for cva_list name mangling with arm32 and arm64 (aarch64) targets
- rtlib: FORMAT() should always use all the fix digits in exponential form, e.g. format(1234, "###e+#") = "123e+1"
- github #92: FORMAT() should always have an exponent of 0 for zero.
- sf.net #928: Wrong sign / type when printing BYTE values on arm/aarch64
- various HANDLE_WM_*, FORWARD_WM_* macros in win/windowsx.bi were broken
- gcc backend was trying to pass single types to double typed built-ins
- gfxlib2: character data was incorrectly stored for values >= 128 causing incorrect values returned from SCREEN() function
- LLVM backend: escape procedure names on win32 targets to avoid having llvm mangle the names also
- sf.net #572: don't call vectorize operations for anything but gas+x86+sse backend / options
- sf.net #572: gas+x86+SSE faulty optimisations with '-vec 2' for intra-expression vectorisation of horizontal add optimisation was generating bad AST resulting in bad assembly
- gcc backend: inline asm for float to integer calculations was generating bad code with gcc optimizations due to x87 stack clobbered but not reported to gcc
- gcc backend: fix GOSUB causing crash/exception on win64 - setjmp/longjmp failed on mingw-w64 64-bit and needed to be passed 2 parameters instead of 1
- fix __FB_EVAL__() incorrectly reading past the end of the expression, and report errors in expressions
- C backend: switch to .text section after writing the exports to the C file in the explicit asm block. gcc can move sections around with optimizations and there is a change between 7.x and 8.x that causes issue with where the directive section is located
- sf.net #917: optimize 'm += s' string concatenations to fix the long compile times in the gcc backend (which makes heavy use of string building).
- github #217: C backend, fix gcc array out of bounds warning when compiled with -O2 or higher optimizations and accessing non-zero lower bound fixed length string arrays
- C backend: inline asm - don't add rsp/esp to the clobber list, it's deprecated in newer gcc versions and silently ignored in older versions
- github #309: token pasting operator '##' allows pasting of single '_' characters
- fbc: re-add __FB_GUI__ intrinsic define - the change was clobbered for a time during fbc 1.08.0 development after basic-macros were added