+ basic support for Objective-Pascal: objcclass, objcprotocol,
objcselector on all Darwin platforms (ppc32/64, i386, x86_64, ARM),
see http://wiki.freepascal.org/FPC_PasCocoa and
http://wiki.freepascal.org/FPC_PasCocoa/Differences for some dialect
details. Use {$modeswitch objectivec1} to activate
+ Cocoa, iPhone/UIKit and WebKit interfaces for use with the new
syntax mode
git-svn-id: trunk@14068 -
required or optional) into a procoption flag
* reordered some procdef fields to have less wasted space due to alignment
git-svn-id: branches/objc@14049 -
- don't allow operator enumerator with non object/class/interface result type
- add some test from Alexander S. Klenin
(issue #0014990)
git-svn-id: trunk@14043 -
rtl: add enumerators to the basic classes
tests: add enumerators test which compiles and work both by fpc and dcc
compiler:
+ start for-in loop implementation: implement for-in loop for types (enumerations and ranges), strings, arrays and sets. todo: perform type checking, optimize array and string loops - use temp for expression, implement for-in loop for classes
test:
+ add a simple test for the 'for-in' loop
compiler: fix string for-in loop. now it uses a temp variable to store string expression result
complier: fix for-in array loop. use a temp variable for the loop expression only if loop is not an open array loop
complier: continue enumerator implementation:
+ add operator enumerator which give an ability to add enumerator for an existent type (for example to override builtin string enumerator)
+ add class enumerator support via delphi compatible GetEnumerator method + enumerator class/object template (function MoveNext: Boolean; property Current)
+ tests
compiler: fix for-in loop for arrays. delphi does not copy arrays to a temp variable and it is possible to change array during loop. + test
compiler: add reference for the enumerator operator when it is used + another test for operator enumerator for a class
compiler: add reference for the enumerator operator when it is used + another test for operator enumerator for a class
compiler: enumerator directive support:
+ allow to mark methods and properties by 'enumerator MoveNext' and 'enumerator Current' modifiers. Parser checks return types and duplicates.
+ prefer *marked* by enumerator directive methods and properties than GetEnumerator and Current builtin symbols
+ increase ppu version
+ test
rtl: add IEnumerator and IEnumerable interfaces declarations
tests: for-in loop tests:
+ add small comment at the top of test program
compiler: allow 'enumerator MoveNext' for the interface function declaration + test
compiler: move all for-in loop helpers to the nflw unit
compiler: don't allow the compiler to choose the non-valid enumerator operator for the for-in loop
git-svn-id: trunk@14008 -
+ changes in compiler, utils, packages to resolve identifier conflicts with the new TObject methods (like changing of UnitName arguments to AUnitName, adding Classes. before the toString, etc). (issue #0014931)
git-svn-id: trunk@14005 -
- compiler: allow message after the *deprecated* keyword
- compiler: raise an internal error if deprecated message is trying to set to a non clear string pointer
git-svn-id: trunk@13997 -
-- Zusammenführen von r13887 in ».«:
A tests/test/tfinal1.pp
U compiler/msgtxt.inc
U compiler/msgidx.inc
U compiler/pdecsub.pas
U compiler/tokens.pas
U compiler/symconst.pas
U compiler/msg/errore.msg
U compiler/utils/ppudump.pp
-- Zusammenführen von r13890 in ».«:
G compiler/msgtxt.inc
G compiler/msgidx.inc
U compiler/nobj.pas
G compiler/msg/errore.msg
-- Zusammenführen von r13891 in ».«:
A tests/test/tfinal2.pp
git-svn-id: trunk@13938 -
from any ordinal constant, and give a warning for this one allowed
conversion like Kylix does (mantis #14713)
* this required calling simplify from typecheckpass in ttypeconvnode for
cord_to_pointer, because this simplification prevents the type checking
from happening (but the typecheck itself also does that simplification)
git-svn-id: trunk@13919 -
procdefs after writing it, so that it can be written multiple times in
different units. It was only written once now, namely the first time it
was used. If this occurred before the implementation had been parsed, then
no info about low/high pc was written for this procdef.
* checking whether procstarttai is assigned is not a good way to determine
whether or not a procdef is defined in the current unit (it can also be
set if we are in the middle of parsing a uses clause, since all procdefs
are only reset afterwards). Check whether the parent static/globalsymtable
"iscurrentunit" instead.
git-svn-id: trunk@13912 -
-- Zusammenführen von r13884 in ».«:
U compiler/msgtxt.inc
U compiler/msgidx.inc
U compiler/pdecsub.pas
U compiler/pdecobj.pas
U compiler/tokens.pas
U compiler/ppu.pas
U compiler/symconst.pas
U compiler/msg/errore.msg
U compiler/utils/ppudump.pp
-- Zusammenführen von r13885 in ».«:
A tests/test/tsealed1.pp
A tests/test/tabstract1.pp
A tests/test/tsealed2.pp
-- Zusammenführen von r13893 in ».«:
A tests/test/tsealed3.pp
A tests/test/tsealed4.pp
git-svn-id: trunk@13908 -
o add accessibility info for fields and methods (public/protected/private)
o write method type info for methods not implemented in the current module
(for tf_dwarf_only_local_labels systems)
git-svn-id: trunk@13833 -
(fixes displaying value shortstring parameters on SPARC, as reported on
fpc-devel mailing list on 20091005 by Mark Morgan Lloyd)
git-svn-id: trunk@13813 -
-- Zusammenführen der Unterschiede zwischen Projektarchiv-URLs in ».«:
U rtl/arm/setjump.inc
A rtl/arm/thumb2.inc
U rtl/arm/divide.inc
A rtl/embedded/arm/stm32f103.pp
U rtl/inc/system.inc
U compiler/alpha/cgcpu.pas
U compiler/sparc/cgcpu.pas
U compiler/i386/cgcpu.pas
U compiler/ncgld.pas
U compiler/powerpc/cgcpu.pas
U compiler/avr/cgcpu.pas
U compiler/aggas.pas
U compiler/powerpc64/cgcpu.pas
U compiler/x86_64/cgcpu.pas
U compiler/cgobj.pas
U compiler/psystem.pas
U compiler/aasmtai.pas
U compiler/m68k/cgcpu.pas
U compiler/ncgutil.pas
U compiler/rautils.pas
U compiler/arm/raarmgas.pas
U compiler/arm/armatts.inc
U compiler/arm/cgcpu.pas
U compiler/arm/armins.dat
U compiler/arm/rgcpu.pas
U compiler/arm/cpubase.pas
U compiler/arm/agarmgas.pas
U compiler/arm/cpuinfo.pas
U compiler/arm/armop.inc
U compiler/arm/narmadd.pas
U compiler/arm/aoptcpu.pas
U compiler/arm/armatt.inc
U compiler/arm/aasmcpu.pas
U compiler/systems/t_embed.pas
U compiler/psub.pas
U compiler/options.pas
git-svn-id: trunk@13801 -
load it inline. This should be safe even on the non-fragile ABI, because
the isa and superclass fields are expected at fixed offsets by the runtime
(and gcc and clang also use direct memory accesses in this case)
git-svn-id: branches/objc@13784 -
to objc_msgSend* into the callnode. This allows reusing the current
call node rather than having to create a new one, and is in particular
necessary because even though the objc_msgSend* functions are declared
as varargs, you're supposed to typecast them to the function type
describing the method before calling them (so they should *not* use
varargs calling conventions!)
* for the above, a field called fobjcforcedprocname has been added to the
callnode, which can be set to a string that will be used as the (mangled)
name of the function to call instead of the mangled name of the procsym
-> fixes calling obj-c methods with floating point arguments on ppc
git-svn-id: branches/objc@13783 -
the same as for exporting functions/procedures and variables: add the name
of the class to the "exports" section of the library. By default, classes
are only visible inside a shared library.
git-svn-id: branches/objc@13765 -
declarations (since even though they're not used in the Pascal code,
they probably are in the Objective-C code that actually implements them)
git-svn-id: branches/objc@13764 -
* the objc unit links against the Foundation instead of against the Cocoa
framework, and inludes an interface to either the fragile or non-fragile
obj-c run time depending on the target platform
+ support for the non-fragile Objective-C runtime/ABI, as used on Mac OS X
for ARM (iPhone) 64 bit (PowerPC/64, x86_64) -- all these targets now
are now also supported for the objectivec1 modeswitch
+ support for private_extern symbol bindings, required for the above
* mark objcclasses that are declared in the implementation section of a
unit as "hidden" (not sure what the effect is, since the Objective-C
runtime does not seem to do anything with this flag)
* enabled all obj-c tests for the newly supported platforms
git-svn-id: branches/objc@13763 -
U ide/fpusrscr.pas
U rtl/unix/video.pp
U rtl/i386/i386.inc
U rtl/win/wininc/defines.inc
U rtl/win/systhrd.inc
U rtl/linux/m68k/dllprt0.as
U rtl/linux/i386/syscall.inc
U rtl/linux/i386/dllprt0.as
U rtl/linux/i386/si_c.inc
U rtl/linux/i386/si_prc.inc
U rtl/linux/i386/si_c21.inc
U rtl/linux/i386/si_g.inc
U rtl/linux/i386/si_c21g.inc
U rtl/linux/i386/si_uc.inc
U rtl/linux/i386/si_dll.inc
U rtl/linux/x86_64/dllprt0.as
A tests/test/packages/hash/sha1test.pp
U tests/webtbs/tw12038.pp
U compiler/cclasses.pas
U compiler/symdef.pas
U compiler/ncon.pas
U compiler/ncgrtti.pas
U compiler/cgbase.pas
U compiler/pstatmnt.pas
U compiler/systems/t_linux.pas
U compiler/pass_1.pas
U compiler/x86/cgx86.pas
U compiler/x86/agx86att.pas
U compiler/x86/aasmcpu.pas
U compiler/aasmbase.pas
A packages/fcl-xml/tests/extras.pp
A packages/fcl-xml/tests/extras2.pp
--- Merging r13696 through r13760 into 'packages/fcl-xml/tests/README_DOM.txt':
U packages/fcl-xml/tests/README_DOM.txt
--- Merging r13696 through r13760 into '.':
U packages/fcl-xml/tests/domunit.pp
U packages/fcl-xml/src/xpath.pp
U packages/Makefile
U packages/gmp/src/gmp.pas
U packages/gmp/readme
U packages/fcl-db/src/base/db.pas
U packages/fcl-db/src/base/database.inc
U packages/sqlite/src/sqlite3.inc
U packages/fcl-web/src/custweb.pp
U packages/hash/fpmake.pp
U packages/hash/Makefile.fpc
A packages/hash/src/sha1.pp
U packages/hash/Makefile
U packages/hash/examples/Makefile.fpc
A packages/hash/examples/sha1test.pp
U packages/hash/examples/Makefile
U packages/Makefile.fpc
U packages/fcl-base/src/ascii85.pp
U packages/fcl-base/src/custapp.pp
U packages/chm/src/chmwriter.pas
U packages/chm/src/paslzx.pas
U packages/chm/src/chmreader.pas
--- Merging r13761 into '.':
U compiler/powerpc/agppcvasm.pas
U compiler/ppcgen/agppcgas.pas
git-svn-id: branches/objc@13762 -
a) it's unnecessary
b) it's slower than "direct" RIP-relative accessing
c) it's not supported on darwin/x86_64 in certain cases
* never use absolute addressing on darwin/x86_64 (like on win64)
* when not generating PIC, make sure that a_loadaddr_ref_reg on x86_64
also uses RIP-relative addressing for darwin/x86_64 and win64
git-svn-id: trunk@13760 -
* don't allocate tobjectdef.implementedinterfaces for corba interfaces
since the compiler doesn't support multiple inheritance for them
* extended/corrected related tobjc22 test
* increased ppu version, because implementedinterfaces is now
present in different cases
git-svn-id: branches/objc@13738 -
special treatment required to put self as the first parameter in the
debug info
+ added Apple-specific Objective-C related DWARF attributes
* properly emit debug information for Objective-C classes and methods
* fixed some typos in comments
* properly mark "absolute" local variables mapped to parameters as
variables in the debug info rather than as parameters (gdb expects one
parameter to be passed when calling functions from inside gdb per
parameter mentioned in the debug info, even if multiple parameters
have the same stack address)
git-svn-id: branches/objc@13723 -
o fixed gprof under linux/i386
o fixed pic-compilation of the linux/i386 rtl
o initialisation of linux shared libraries is now possible with pic-code
git-svn-id: trunk@13703 -
"class" keyword like for regular Object Pascal classes, not using the
"objcclass" keyword. E.g.: NSObjectClass = class of NSObject;
* modified tobjc18 to test this functionality
git-svn-id: branches/objc@13701 -
forced to something else by the compiler (internal rtl functions etc),
necessary for the objc branch
* fixed adding all used function result registers to the list of
registers that may need to be saved before a function call
git-svn-id: trunk@13695 -
result parameter (cosmetic, since those parameter were not actually used)
* fixed calling obj-c methods where the result is returned via a hidden
parameter: since the hidden result remains hidden in the newly constructed
objc_msgSendStret*() variant, it is inserted again by the new callnode
-> remove the one inserted by the original callnode
git-svn-id: branches/objc@13692 -
register required classes:
+ add lazy references to classes referred to in the current unit
+ define reference symbols for classes defined in the current unit
+ add lazy references to parent classes of classes defined in the current
unit
git-svn-id: branches/objc@13679 -
based on patch by Dmitry Boyarintsev (mantis #14508)
o Todo: while parsing the class declaration, check whether the
field types are valid for use in an obj-c class
* use a common pool for selector names generated by objcselector()
and by the rtti info for implemented classes
git-svn-id: branches/objc@13663 -
confuse the assembler (patch by Dmitry Boyarintsev, from mantis
#14508)
* use objextname and not objrealname in the method name (extname is
the class/protocol/category name as it appears/will appear to the
ObjC runtime)
git-svn-id: branches/objc@13655 -
libtool from Xcode 3.2 (Mac OS X 10.6) does not support all new linker
options (in particular -no_order_inits and -no_order_data, both of
which must be specified when compiling dynamic libraries with FPC and
Xcode 3.2)
git-svn-id: trunk@13645 -
* don't allow "type x = type y" for objcclass/objcprotocol for now
(would require generating new rtti for the new name)
git-svn-id: branches/objc@13641 -
after merge of r13618 from trunk
* also allow "varargs" for objclass/objcprotocol methods
* set the cdecl calling convention for objcclass/objcprotocol methods in
handle_calling_convention() rather than in a separate routine in
pdecobj (and do the same for cppclass methods)
* check that array of const parameters and varargs are only used with
external objc-methods (can only be done after the class is parsed,
because earlier on it's not known yet whether or not it is external)
git-svn-id: branches/objc@13624 -
from the def)
+ added (disabled) code to correctly calculate the parameter offsets for
ppc, see comments why it's not activated
git-svn-id: branches/objc@13619 -
routines (just like "varargs"), because if implemented in Pascal then
on the callee side this array of const parameter is treated as a Pascal-
style array of const
* don't give the "cdecl'ared functions have no high parameter" warning for
array of const parameters for cdecl external routines and procvars
git-svn-id: trunk@13618 -
Darwin platforms, so that no data can be placed below that address.
This fixes the strange Windows-compatible resource API, which
assumes that addresses <64kb do not exist.
git-svn-id: trunk@13600 -
* left old cpu-specific set helper code under ifdef FPC_OLD_BIGENDIAN_SETS
in case someone wants to write new assembler set helpers (although most
of them should be optimally generated by the compiler already if
http://wiki.freepascal.org/FPC_HowToDo#Bit.28field.29_getting.2Fsetting_primitives
are optimally implemented)
git-svn-id: trunk@13582 -
change, resulting in slightly different DWARF debug information
(mantis #13508)
The cause was saving a node pointer in a local variable, processing
it further, and later on checking whether it changed by comparing
the stored and the current instance pointer. The problem was that
the node could have been freed and reallocated at the same address
(but with different contents), so this check sometimes resulted
in (hard to reproduce) false negatives.
git-svn-id: trunk@13580 -
byte is used for zero-termination (so we now always read blocks of
exactly 32kb from disk)
* set the first byte of the buffer to #0 when opening a file initially
git-svn-id: trunk@13576 -
(and use the resulting compiler as final compiler to compile the rest of
the source tree and to install)
Note: this means that if you manually use "make cycle RELEASE=1", the RTL
afterwards will not be usable, because it will have been compiled with
WPO for the compiler; if you use "make all" in the root FPC dir, there
is no problem since that makefile recompiles the RTL anyway.
git-svn-id: trunk@13560 -