The sources of the Free Pascal compiler, RTL, packages and utilities. See https://www.freepascal.org/ for more info.
Go to file
Jonas Maebe bd09b88a5b + support for http://en.wikipedia.org/wiki/Blocks_(C_language_extension)
o blocks are implemented as a variation of procedure variables
   o declaration of a block variable: "test: procedure(c: char) is block;"
     (C equivalent: (void)(^test)(char c) )
   o the compiler automatically converts procedures/functions whose address
     is passed to a block parameter or assigned to a block variable into
     a "block". This consists of
    1) generating a block descriptor (containing the size of the "block
       literal" (see below) and the signature of the invocation function
       encoded as an Objective-C selector)
    2) generating a wrapper function around the original funcion (with C
       calling convention), that has an extra first hidden parameter
       (marked as vo_is_parentfp in the compiler) whose type is a pointer
       to the describing "block literal"
    3) generating the "block literal", which contains a pointer to an
       external variable indicating whether this block captures context or
       not, some flags (see compiler/blockutl.get_block_literal_flags for
       info), a pointer to the wrapper function and a pointer to the
       descriptor. In the future, it will also contain captured variables.
   o right now, only global procedures/functions can be converted to blocks
     (because they don't require state capturing). The next steps are (Object
     Pascal) methods (not Objective-C methods, because Objective-C method
     procvars don't exist) and finally nested functions
   o on Mac OS X, the functionality will only work on Mac OS X 10.7 and later,
     because we have to use the so-called "ABI.2010.3.16" to ensure that
     our blocks aren't called as variadic functions by the runtime (which
     came out after the Mac OS X 10.6 release)
   o while the currently implemented functionality does not require any
     library support at all, there's no use enabling it on other platforms
     because unless it has been confirmed to work with a blocks runtime,
     there's no point in using blocks (they're just somewhat bulky procvars
     right now). Enabling it on other platforms (in combination with the
     GNUStep Objective-C run time), should simply be a matter of adding
     the right {$linklib xxx} statement to rtl/inc/blockrtl.pp file, adding
     that file to Makefile.fpc for that platform and adding that platform
     to the compiler/systems.systems_blocks_supported set

git-svn-id: branches/blocks@28232 -
2014-07-18 09:15:22 +00:00
compiler + support for http://en.wikipedia.org/wiki/Blocks_(C_language_extension) 2014-07-18 09:15:22 +00:00
ide * add possibility of overriding the disabled VESA driver using /VESA 2014-05-17 16:31:51 +00:00
installer * package openssl supported for OS/2 now 2014-05-03 22:35:50 +00:00
packages * fcld-db: oracle: cosmetic 2014-07-15 11:35:29 +00:00
rtl + support for http://en.wikipedia.org/wiki/Blocks_(C_language_extension) 2014-07-18 09:15:22 +00:00
tests + support for http://en.wikipedia.org/wiki/Blocks_(C_language_extension) 2014-07-18 09:15:22 +00:00
utils * pas2jni: Fixed enums, added equals() methods to objects, enums and sets. 2014-06-24 13:57:31 +00:00
.gitattributes + support for http://en.wikipedia.org/wiki/Blocks_(C_language_extension) 2014-07-18 09:15:22 +00:00
.gitignore * more finegrained parallelism support for testsuite runs: the tests are no 2012-06-03 17:56:28 +00:00
fpmake_add1.inc * Handle the location of each package at run-time, not at compilation time 2013-06-02 17:55:23 +00:00
fpmake_proc1.inc * Handle the location of each package at run-time, not at compilation time 2013-06-02 17:55:23 +00:00
fpmake.pp * Handle the location of each package at run-time, not at compilation time 2013-06-02 17:55:23 +00:00
Makefile * swap 2.6.4 and 2.6.2 in supported versions. Message now says 2.6.4, but 2.6.2 will work. 2014-04-20 15:06:47 +00:00
Makefile.fpc * swap 2.6.4 and 2.6.2 in supported versions. Message now says 2.6.4, but 2.6.2 will work. 2014-04-20 15:06:47 +00:00