Commit Graph

12835 Commits

Author SHA1 Message Date
svenbarth
aca2bd83c7 pexpr.pas, post_comp_expr_gendef:
This is not the result you are looking for: The result of "postfixoperators" is only set to true if either "again" was "true" once or the node was changed to an errornode. So using the result for deciding whether we overwrite the def or not is incorrect. So just call "postfixoperators" and process the returned node accordingly.

git-svn-id: branches/svenbarth/generics@19731 -
2011-12-03 10:53:02 +00:00
svenbarth
35377bae67 Fix a remaining artefact from the overloaded symbols approach (just a comment, but nevertheless a change...)
git-svn-id: branches/svenbarth/generics@19722 -
2011-12-02 14:12:42 +00:00
svenbarth
6aeceb92e8 ptype.pas, read_named_type, expr_type:
* Adjust a comment.
* Add an additional check for the owning symtable of the dummy symbol and the current_structdef just to be on the save side (it's not needed inside specializations)

git-svn-id: branches/svenbarth/generics@19721 -
2011-12-02 14:11:56 +00:00
svenbarth
6a83ebc4a5 Fix introduced regressions.
pgenutil.pas, generate_specialization:
* If we are parsing the result type of a function or operator that belongs to a generic (parse_generic is true) we need to accept also "_LT" and "_GT" as for this the "block_type" is NOT set to one of "bt_type", "bt_var_type", "bt_const_type" and only there "_LSHARPBRACKET" and "_RSHARPBRACKET" are returned by the scanner. This is part of the fix for webtbs\tw18567.pp.
* In non—Delphi modes if we encounter a specialization of the currently parsed class/record (using "specialization"!) the given "tt" will be an errordef (because the def of the generic's symbol was not yet set to "current_structdef"). To solve this we check in this case whether the calculated generic name is equal to that of the "current_structdef" and simply return that as specialized def. This fixes test\tgeneric11.pp.
* When searching for the generic symbol search if the generic belongs to a class or record then we need to search for it in the class or record. This fixes webtbs\tw16090.pp.

ptype.pas
* parse_nested_types: We now return the generic defs for specializations inside generics instead of an undefined def, so we must also parse nested type usages correctly, so that type checks don't fail (undefined defs circumvent them mostly). This fixes webtbs\tw10247.pp.
* single_type: We need to allow _LT as an indication for a Delphi specialization as return types are parsed with block_type not in "bt_type", "bt_var_type", "bt_const_type". This is also a fix a part of the fix for webtbs\tw18567.pp.
* read_named_type, expr_type:
Fixes for test\tgeneric17.pp and test\tgeneric22.pp:
(a) In non-Delphi modes we might encounter usages of the generic dummy symbol inside the generic class belonging to it. This is basically a specialization, but as the reference from the dummy symbol to the "current_structdef" is not yet established (this is done after "read_named_type" in "types_dec" returns) we need to use other ways to check for the valid use of the dummy symbol (basically we check whether the name of the dummy symbol and the name of the current_structdef without the type count match)
(b) For specializations we can check whether the genericdef of the currently parsed structdef (the specialization) is the same as the typedef of the encountered dummy symbol.

pexpr.pas, factor, factor_read_id:
Fixes for test\tgeneric17.pp and test\tgeneric22.pp:
To allow the mentioned fixes in ptype for the same tests to be usable at all we must not return an "identifier not found" error if we encounter such a valid use of a generic dummy symbol.

git-svn-id: branches/svenbarth/generics@19719 -
2011-12-02 14:10:06 +00:00
svenbarth
d55684937f generate_specialization:
* Remove some unused variables
* Fix a comment

git-svn-id: branches/svenbarth/generics@19718 -
2011-12-02 14:08:46 +00:00
svenbarth
68624aab3a Incorporate the changes from trunk into "postfixoperators" and "handle_factor_typenode". The latter needed to be extended by a parameter "typeonly" which is "false" in almost all calls except the one inside "factor_read_id" where the "typeonly" parameter of "factor" is used.
git-svn-id: branches/svenbarth/generics@19685 -
2011-11-25 15:25:10 +00:00
svenbarth
4419dc3d34 Rebase to revision 19673
pexpr.pas: Changes in postfixoperators and the base of handle_factor_typenode not yet incorporated (the code from trunk was simply commented for now)

git-svn-id: branches/svenbarth/generics@19676 -
2011-11-24 16:48:47 +00:00
svenbarth
87d9714221 Somehow the changes regarding tf_methods_specialized weren't commited, thus here they are again:
* symconst.pas: remove tf_methods_specialized
* psub.pas: remove check for/inclusion of tf_methods_specialized as this isn't needed anymore since the generic is specialized in a temporary symtable

pgenutil.pas: remove merge artifacts

pdecl.pas: fix compilation ("s" was duplicate)

pexpr.pas:
* fix calling of generate_specialization
* disable the goto in sub_expr for now; this will be enabled again once right hand sides work as well

git-svn-id: branches/svenbarth/generics@19675 -
2011-11-24 14:42:42 +00:00
svenbarth
461d231daa Rebase to revision 19078 (directly before the merge of cpstrnew)
The changes regarding pretty names for generics and token buffer endianess were integrated into my changes. Not every call to generate_specialization is fixed though, so compilation will fail.

git-svn-id: branches/svenbarth/generics@19674 -
2011-11-24 10:19:57 +00:00
sergei
fffa4a35a0 * x86_64: Don't waste time initializing/finalizing saved_standard_registers and saved_mm_registers arrays on every procedure. Initialize once, reinitialize if target system happens to change, and let finalization happen implicitly on shutdown.
git-svn-id: trunk@19672 -
2011-11-23 20:06:38 +00:00
svenbarth
594f84dc2c Merge branch 'unique-syms'
Conflicts:
	compiler/pdecl.pas
	compiler/pexpr.pas
	compiler/pgenutil.pas
	compiler/ptype.pas

The original log messages as git was a bit forgetting here :( (newest at the top):

commit 7ef252de8023494ee6d39910e289f9e31658d47b
Author: Sven Barth <pascaldragon@minerva>
Date:   Mon Nov 21 17:13:36 2011 +0100

    Fix the compilation of inline specializations of which the generic is derived from another generic.
    
    pgenutil.pas, generate_specialization:
    * Set the "block_type" to "bt_type" when parsing the type parameters, so that the nodes are returned as "ttypenode" instead of e.g. "tloadvmtaddrnode" in case of classes outside of type sections.
    * Set the "block_type" to "bt_type" before calling "read_name_type", so that no unexpected sideeffects happen, because types like classes normally only are declared inside type sections (e.g. for the case a generic class is derived from another generic class a classrefdef for the specialized parent class will be created inside the derived specialized class if the block type is not a type one).

commit 1041a8f7a3a41f4fdf2975ce40055c698281ce71
Author: Sven Barth <pascaldragon@minerva>
Date:   Fri Nov 18 19:03:50 2011 +0100

    Improve inline specializations a bit, so now expressions like "TSomeGeneric<TSomeType>.SomeClassProc OP SomeNonGeneric" is possible. Using another class function of a generic as the right side is not yet working (that still needs some thinking).
    
    To achive this the generalization code must basically continue directly after the "factor" call, so that the operator and the right side are correctly parsed when walking up the call stack. This is done by jumping from the end of the specialization code in the "<"-case to the start of "sub_expr". The freshly generated node (in the above example a callnode) will be passed down the callstack through a new parameter "factornode". If that is set (currently only in the case of a specialization on the left side) "factor" won't be called and the right side will be parsed with the "factornode" as the left side. If it is not set (which is the case for all other calls to "sub_expr" in the unit) then the usual call to "factor" will be done and the result will be used as the left side.

commit a01ccd265f8d6cc5a2f3e88e23afbcd3d5960afb
Author: Sven Barth <pascaldragon@minerva>
Date:   Fri Nov 18 18:37:04 2011 +0100

    Fix compilation of ppudump.
    
    symconst.pas:
    * Remove sto_has_generic, which was the last remainer of my "overloaded type symbols" approach.
    * Remove df_methods_specialized, as it isn't needed anymore with the recent "temporary symtable" solution.
    
    psub.pas, specialize_objectdefs, process_abstractrecorddef:
    Remove the checks for/inclusion of df_methods_specialized.
    
    utils/ppudump.pp:
    Add "sp_generic_dummy" to the symbol options.

commit d16deac060e65d4b53e8fe9c27fe7e1f6d00a416
Author: Sven Barth <pascaldragon@minerva>
Date:   Wed Nov 16 16:34:51 2011 +0100

    Fix compilation of "gset.pp" from fcl-stl.
    
    nld.pas:
    Extend ttypenode by a reference to the type symbol. Normally this is simply the typesym of the given def, but for specializations in type sections of generics this is not the case, because generate_specialization will return a reference to the generic definition and not the new one (thus the symbol will be wrong).
    
    ppu.pas:
    Increase PPU version because of the extension of ttypenode.
    
    pexpr.pas:
    * handle_factor_typenode: Extend the function by a "sym" parameter which will normally be "nil". In that case it is set to the def's typesym. The "typesym" field of the created type node is then set to this sym.
    * For now pass nearly always "nil" for the above mentioned sym except inside factor_read_id when we've encountered a typesym.
    
    ptype.pas, read_named_type, expr_type:
    Exchange the "is_owned_by" check with a "sym_is_owned_by" check so that we can correctly detect that we are using a specialized type declaration inside a generic (once nested generic are allowed this condition needs to be checked).

commit 23668d2fc9070afc26b4288ed0db9a8eaf6f40e6
Author: Sven Barth <pascaldragon@minerva>
Date:   Wed Nov 16 07:51:12 2011 +0100

    psub.pas:
    * tcgprocinfo.parse_body: Methods of generic classes need to set "parse_generic" as well, so that variables for "stacked generics" (generic array => generic record) inside the method body are handled correctly.
    * specialize_objectdefs: Don't try to generate method bodies for abstract methods.
    
    pdecvar.pas, read_property_dec:
    Allow specializations for the return types of properties (should they be allowed for index types as well?).
    
    symtable.pas:
    Add a new class "tspecializesymtable" which is basically a globalsymtable but is always assuming to be the current unit. This symtable is used in "generate_specializations" (see below) and is needed to allow visibilty checks for "private", etc. to succeed.
    
    pgenutil.pas, generate_specializations:
    Instead of hackily pushing a symtable that may contain conflicting symbols onto the symtable stack for the specialization, a temporary global symtable using the above mentioned "tspecializesymtable" is created and pushed. After the specialization is done all symbols and defs that were added to the temporary symtable are moved to their final symtable (either the global- or localsymtable of the unit, depending on the current position of compilation). This way symbols are correctly added to a top level symtable, but without potential side effects like resolving the wrong symbol.

git-svn-id: branches/svenbarth/generics@19671 -
2011-11-23 17:25:09 +00:00
sergei
6cb6569d51 * Set pi_uses_exceptions flag when creating/firstpassing ttryexceptnode or ttryfinallynode, not when parsing try statements. It ensures that procedures with exception handling nodes created by compiler (constructors in the first place, but also for..in loops with TObject iterators, etc.) are handled the same way as ones containing exception nodes from user code.
* Modified code generation for constructors so they don't always use pi_needs_implicit_finally. It used to prevent stackframe optimization while not preventing regvar optimization ( tabstractvarsym.is_regvar() checks for pi_uses_exceptions but not for pi_needs_implicit_finally, and constructors were not getting pi_uses_exceptions), resulting in strange code using both exceptions and regvars.
Once setting of pi_uses_exception is fixed, the implicit finally frame can be omitted unless managed temps or local vars are actually present.

git-svn-id: trunk@19668 -
2011-11-22 11:59:44 +00:00
pierre
4bda40649d * Add missing CATRES substitution and remove blank lines in link.res
git-svn-id: trunk@19667 -
2011-11-22 11:15:23 +00:00
pierre
30baddd3b8 Fix Haiku shared library creatiion
git-svn-id: trunk@19665 -
2011-11-21 14:14:31 +00:00
Jonas Maebe
3188916cda * also replace $CATRES for shared libraries (fix for r19649)
git-svn-id: trunk@19661 -
2011-11-20 20:06:43 +00:00
Jonas Maebe
84bf45f0e2 * give an error when trying to call an interface/protocol/category method
using the type name of the interface/protcol/category (they are not
    entities themselves on which you can invoke those methods,
    mantis #20661)

git-svn-id: trunk@19651 -
2011-11-18 22:33:33 +00:00
pierre
836da25e81 * Do not call with UseShell = true if CatFileContent expands the file into parameters
git-svn-id: trunk@19650 -
2011-11-18 22:08:51 +00:00
pierre
b1bd1d29ec Replace cat $RESby $CATRES and call CatFileContent method
git-svn-id: trunk@19649 -
2011-11-18 21:33:24 +00:00
pierre
5d6a7dc03d + TExternalLinker.CatFileContent method and tf_no_backquote_support tsystemflags enum value
git-svn-id: trunk@19648 -
2011-11-18 21:32:25 +00:00
pierre
8e843bc892 Regenerate msg include files
git-svn-id: trunk@19647 -
2011-11-18 21:29:40 +00:00
pierre
8f7ea8718b + Add message for TExternalLinker.CatFileContent method
git-svn-id: trunk@19646 -
2011-11-18 21:28:46 +00:00
pierre
85862e476b Fix for test tw19368
git-svn-id: trunk@19643 -
2011-11-16 22:04:28 +00:00
paul
7f7c665e64 compiler: push nested class hierarchy for parsing nested procedures arguments and results (mantis #0020690, mantis #0020038)
git-svn-id: trunk@19641 -
2011-11-16 03:41:56 +00:00
sergei
c56ef119a1 * tcgguidconstnode: create a new object section before emitting data, otherwise data ends up in arbitrary section, causing e.g. IE 200602289 if it happens to be .bss.
git-svn-id: trunk@19640 -
2011-11-16 02:21:10 +00:00
sergei
8c9ad67682 + tcgexitnode,tcgbreaknode,tcgcontinuenode: added possibility to generate specialized code for leaving unwind-protected regions.
git-svn-id: trunk@19636 -
2011-11-14 22:47:37 +00:00
florian
c12a4989d0 + use cpurox define in the compiler for CPUs having internal ror/rol support
+ optimize (i shl x) or (i shr (bitsizeof(i)-x)) and friends into rol/ror(x,i)

git-svn-id: trunk@19635 -
2011-11-13 18:40:34 +00:00
sergei
ce3f850a68 * x86_64, use rip-relative references when taking address of local code labels, fixes test/library/tlib1a.pp for Linux and FreeBSD and passing exception address to FPC_RAISEEXCEPTION on Darwin.
git-svn-id: trunk@19616 -
2011-11-09 05:12:59 +00:00
paul
a1e0b833b2 compiler: fix ppu read/write of property parameters symtable (bug #0020454)
- add new property option ppo_overrides for property which overrides parent class properties
  - write overriddenpropsymderef only in case if property has ppo_overrides flag
  - save/load parameters symtable only in case if property has ppo_parameters flag and has not ppo_overrides flag
  - in case if property is overrides and has parameters copy original symtable

git-svn-id: trunk@19615 -
2011-11-09 03:35:55 +00:00
pierre
98c7a5e4b0 * Enable internal elf writer for freebsd x86_64 target
git-svn-id: trunk@19608 -
2011-11-08 14:05:57 +00:00
pierre
04138bb4a3 + Add reg_exes target to recompile all *reg.pp sources
git-svn-id: trunk@19607 -
2011-11-08 13:53:32 +00:00
pierre
dd266f262c * Remove obsolete mips files
git-svn-id: trunk@19606 -
2011-11-08 13:48:19 +00:00
paul
2146d8a8ec compiler: allow CASE record block after the methods and other record elements (issue #0020638)
git-svn-id: trunk@19605 -
2011-11-08 02:16:04 +00:00
paul
91294c64de compiler: forgotten message files
git-svn-id: trunk@19604 -
2011-11-08 02:15:09 +00:00
Jonas Maebe
84c23f6b42 * fixed range check warning when doing a native ppc64 compile
git-svn-id: trunk@19595 -
2011-11-04 22:49:04 +00:00
pierre
7f5f552e4a * Fix compilation by disabling warnings for unsupported MIN/MAXSTACKSIZE
git-svn-id: trunk@19591 -
2011-11-03 13:22:53 +00:00
pierre
12d611e255 * Fix compilation by disabling -Sew for 2.4.X compiler versions
git-svn-id: trunk@19590 -
2011-11-03 13:21:57 +00:00
pierre
43abca844f Add missing mode objfpc needed for out parameter type
git-svn-id: trunk@19589 -
2011-11-03 11:46:52 +00:00
pierre
9598baa179 Use out untyped parameter to avoid warnings
git-svn-id: trunk@19588 -
2011-11-03 11:44:01 +00:00
pierre
b1975eb088 Use out untyped parameter to avoid warnings
git-svn-id: trunk@19587 -
2011-11-03 11:43:29 +00:00
pierre
019ecd53fe Use out parameter type for tppufile.getXXX methods
git-svn-id: trunk@19586 -
2011-11-03 11:09:34 +00:00
pierre
362a3c8beb Enable -Sew by default, set ALLOW_WARNINGS to 1 to disable
git-svn-id: trunk@19585 -
2011-11-03 10:27:58 +00:00
pierre
b6de7f0d6b * Suppress Comaprison might be always false if first_mm_imreg is zero
git-svn-id: trunk@19584 -
2011-11-03 10:13:26 +00:00
pierre
97559ea92a * Define MAX_OPER_X to avoid warnings about array index past maximum value
git-svn-id: trunk@19583 -
2011-11-03 10:12:31 +00:00
pierre
531d3808fc Override abstract method to abvoid warning at compilation time
git-svn-id: trunk@19582 -
2011-11-03 10:10:40 +00:00
pierre
8319972722 Override abstract method to abvoid warning at compilation time and suppress warning about macos_direct_globals constant
git-svn-id: trunk@19581 -
2011-11-03 10:10:11 +00:00
pierre
695556fe23 * Avoid warnings about use_PR constant boolean
git-svn-id: trunk@19580 -
2011-11-03 10:09:20 +00:00
pierre
44f8bb35b7 Override abstract method to abvoid warning at compilation time
git-svn-id: trunk@19579 -
2011-11-03 10:08:37 +00:00
pierre
42c98f3cd5 Override abstract method to abvoid warning at compilation time
git-svn-id: trunk@19578 -
2011-11-03 10:08:12 +00:00
pierre
fc9dd61f03 Avoid warning about missing fields in embedded_controllers array
git-svn-id: trunk@19577 -
2011-11-03 10:07:35 +00:00
pierre
3a7af29d3a Use aint type local variable in read_index_shift to avoid wrong typecast
git-svn-id: trunk@19576 -
2011-11-03 10:06:36 +00:00