passing any value to that parameter which has the same size as the
parameter (it basically acts as if there is an explicit type conversion
to the parameter type around the value at the caller side). If a procvar
has an univ parameter, all procvars whose corresponding parameter
has the same size as that univ parameter are similarly compatible.
This transparent compatibility can however cause crashes in case of
of the procvars when one of the types is passed on the stack and the
other isn't (because then the called routine will a) load the parameter
from a wrong location and b) pop the wrong amount off of the stack at
then end). Therefore FPC will warn in most cases where this can happen.
(mantis #15777)
git-svn-id: trunk@15010 -
- fix type visibility (was always public)
- fix parsing of class sections after the type declaration
- allow nested classes declarations
+ tests
git-svn-id: trunk@14607 -
(mantis #14940 and #14941)
* only turn var/our shortstring parameters with a length of 255 into
openstring parameters with {$p+} (new tbf/tb0217.pp)
git-svn-id: trunk@14602 -
- implement class properties: properties which can access only static fields and static class methods
- tests
- fix a possibility to call an instance method from the class method
git-svn-id: trunk@14585 -
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 -
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 -
- 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 -
-- 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 -
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 -
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 -
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 -
starting with a previous 2.3.1 or compiler built from the objc branch
+ added basic objcprotocol support (only for external protocols
currently)
o use in type declaration: "type xp = objcprotocol ... end;"
o when defining a root class that implements it:
"type yc = objcclass(xp) ... end" (note: no support yet
for something like "objcclass(id,xp)" or so)
o when defining a non-root class that implements a protocol:
"type zc = objcclass(nsobject,xp) ... end"
o includes support for "required" and "optional" sections
o no support yet for the objcprotocol(<protocol>) expression
that enables getting a class instance representing the
protocol (e.g., for use with "conformsToProtocol:")
o message names have to specified in protocol declarations,
but if an objcclass implements a protocol, the message names do
not have to be repeated (but if they are, they have to match;
the same goes when overriding inherited methods)
+ allow specifying the external name of Objective-C classes and
protocols, since classes and protocols can have the same name
(and you cannot use the same Pascal identifier in such caseq)
+ added NSObject protocol, and make the NSObject class use it
+ added missing NSObject class methods that have the same name
as instance methods (added "class" name prefix to avoid clashes)
* fixed several cases where the compiler did not treat Objective-C
classes/protocols the same as Object Pascal classes/interfaces
(a.o., forward declarations, alignment, regvars, several type
conversions, ...)
* allow "override" directive in objcclass declarations, and print
a hint if it's forgotten in an external declaration (because it
doesn't really matter there, and may make automated header
conversion harder than necessary) and an error if will be used in
a non-external declaration (because it is not possible to start
a new vmt entry-tree in Objective-C, you can only override parent
methods)
* reject objcclasses/protocols as parameters to typeof()
* don't try to test VMT validity of objcclasses/protocols
git-svn-id: branches/objc@13375 -
can create ambiguities for the parser in case the field names also exist
as modifiers (TP- and Delphi-compatible, mantis #13971) + tests
* fixed tests that broke because of this change
git-svn-id: trunk@13334 -
o support for declaring external Objective-C classes (see
rtl/inc/objcbase.pas), including derived classes
o support for converting methods of objcclasses into selectors
(see tests/test/tobjc1.pp)
o support for loading from/storing to fields of objcclasses
o support for calling Objective-C methods using regular
Object Pascal syntax (see tests/test/tobjc1.pp)
o some things that are known to be not yet working:
o automatic conversion from ID to objcclasses and back
o declaring and implementing new objcclasses/methods in Pascal code
o debug information (objcclasses are currently plain pointers
as far as the debugger knows)
git-svn-id: branches/objc@13162 -
they always use the same parameter pushing order
* define the pushleftright_pocalls constant only for i386 so it cannot
be accidentally used anymore for other platforms
git-svn-id: trunk@12891 -
the syntax is exactly the same as for "external", except for
the keyword. It is currently only active for Darwin targets.
It should also work at least for Linux targets, but only with
the GNU assembler (which is why it is not activated there)
+ test for this functionality
git-svn-id: trunk@12009 -
for programs. this allows speciailizations to be done in the interface
part of the unit
* support tobject.typemember.typemember nesting for generics
* fix generic parameter checking when a typemember was created with the
type of a parameter
* known issue is nested specializations don't work yet because the token
replay can't handled nested replays yet
git-svn-id: trunk@11404 -
a) cpu64bitaddr, which means that we are generating a compiler which
will generate code for targets with a 64 bit address space/abi
b) cpu64bitalu, which means that we are generating a compiler which
will generate code for a cpu with support for 64 bit integer
operations (possibly running in a 32 bit address space, depending
on the cpu64bitaddr define)
All cpus which had cpu64bit set now have both the above defines set,
and none of the 32 bit cpus have cpu64bitalu set (and none will
compile with it currently)
+ pint and puint types, similar to aint/aword (not pword because that
that conflicts with pword=^word)
* several changes from aint/aword to pint/pword
* some changes of tcgsize2size[OS_INT] to sizeof(pint)
git-svn-id: trunk@10320 -
for qwordbool) + test:
o assigning true to such a variable now sets them to $ff/$ffff/$ffffffff
o these types are now all signed
o converting an integer type to a byte/word/long/qwordbool using an
explicit type cast keeps the integer's original value stored in the
bool, instead of forcing it to ord(true)/ord(false)
(mantis #10233 and #10613, implemented for all architectures, testsuite
tested for ppc32, sparc and x86)
* fixed some places where the rtl depended on longbool(true) having the
value 1
* extended several boolean tests (and adapted some to no longer assume
that byte/word/long/qwordbool(true)=1)
+ support for converting to qwordbool in second_int_to_bool for x86, ppc
and sparc
git-svn-id: trunk@9898 -
treats equal open arrays, open strings and arrays of const
(implicitly also open) as exactly matching (since you
cannot declare such types on their own, so they will
never match exactly)
* require that forward declared procedures match the
implementation exactly for both the parameters (with
the above modification) and result type (mantis
#10425 and the related webtbf/tw10425a.pp)
git-svn-id: trunk@9484 -
* small cleanups of unused variables in firstpass
* node_resources_fpu() created to get an approximation of the
required fpu registers
* for the moment use node_complexity in the CG until the
node_resource_int() is created
git-svn-id: trunk@8655 -
* only suggest = if the user tried to overload <>
* suggest ** if the user tried to overload ^ (mantis #9606)
* no suggestion otherwise
(instead of always suggesting '=')
git-svn-id: trunk@8402 -
* fixed some (harmless) ptrint warnings
- removed some commented code in agppcmpw
* added one missing field in a typed constant in cp1251
git-svn-id: trunk@8081 -
calling convention that has different hidden parameters than the
interface declaration no longer compiled in Delphi mode (e.g.
webtbs/tw7329.pp on i386)
* fixed remaining declaration parsing incompatibilities in TP/Delphi
modes (other modes already gave errors for the things below):
* give an error for "function a: byte;" in interface followed by
"procedure a;" in implementation ("function a;" in implementation
still allowed as in TP/Delphi)
* give an error for "function a(b: byte):byte" in interface
followed by "function a: byte;" in implementation (if one parameter
or return type is specified in implementation, everything must
be repeated -- "function a;" still allowed)
* copied webtbs/tw0890.pp to webtbf/tw0890a.pp since it now correctly
fails, and modified webtbs/tw0890.pp so it doesn't fail with the
new code
git-svn-id: trunk@5688 -
* symtables based on TFPHashObjectList and TFPObjectList
* rename torddef.typ to torddef.ordtype
* rename tfloatdef.typ to tfloatdef.floattype
* rename tdef.deftype to tdef.typ
* remove obsolete browser code, browcol is kept so the ide
can still be compiled
git-svn-id: trunk@5192 -
of hidden parameters can be different between calling conventions and cause problems
with delphi mode where the implementation calling convention can be skipped
git-svn-id: trunk@4741 -
* -Si and $inline directive control are now local switches and
have finer control on whether a function will really inlined or not
git-svn-id: trunk@4553 -
the external linker
* create import libraries for dll imports, this uses
the new objdata framework to generate the binary
object files directly without needing an assembler pass
* store import_dll and import_name in ppu
* external linker uses import libraries
* internal linker uses import info from symtables,
no dlls are needed anymore
git-svn-id: trunk@3255 -
* change booleans in arraydef to set
* set option in arraydef to indicate a constant string so
a nicer type can be shown instead of array[0..x] of char
git-svn-id: trunk@3051 -
* support for case aware filesystems (Windows), they do now only
one lookup if a file exists
* add -WI option to generate import section for DLL imports or
let the linker handle it. Default is still import section until
the Makefiles are fixed, then the generation can be left to the
linker
git-svn-id: trunk@2274 -
- fixes in asmreader, basic stuff works again, the rest is untested
- removed lot of unnecessary ungetcpuregister()s
- various other fixes i forgot
+ basic amigaos syscalls support. still lacks explicit funcretloc
git-svn-id: trunk@1943 -
(so both can be combined with each other, as well as with other calling
conventions)
* defined COMPPROCINLINEFIXED so SYSTEMINLINE is again activated
git-svn-id: trunk@658 -
cdecl/cppdecl procedures on Mac OS/Mac OS X to fix compatibility with
GPC (slightly more efficient than Metrowerks behaviour below, but
less efficient in most cases than our previous scheme)
+ "mwpascal" procedure directive to support the const record parameter
behaviour of Metrowerks Pascal, which passes all const records by
reference
* proc to procvar moved from addrnode to typeconvnode
* inlininginfo is now allocated only for inline routines that
can be inlined, introduced a new flag po_has_inlining_info