using their actual type (array/record) rather than using the
simplified type (void), so we can also return an actual value and
assign it to something (void means that nothing is returned and
cannot be assigned to anything) (completes fixing
tests/test/tnoext4.pp for llvm)
git-svn-id: trunk@34120 -
(e.g. an empty record): return an "undefined" instance of the result
type (since it's empty, its contents are irrelevant). Before, we
returned "void", but that means returning nothing rather than returning
something empty (part of fixing test/tnoext4 for llvm)
git-svn-id: trunk@34119 -
const builder, it can only initialise the function pointer part of the
complex procvar -> convert the to-size to an address-only version of
the complex procvar to avoid us trying to bitcast an address into a
record containing both the function and self/nestedfp pointer
(fixes test/tmaclocalprocparam4e for llvm)
git-svn-id: trunk@34118 -
that address as an "address-only" procvar instead of supposedly
emitting a complex procvar itself as the address part of that same
complex procvar type (part of fixing test/tmaclocalprocparam4e.pp
for llvm)
git-svn-id: trunk@34117 -
records: as an array of 10 bytes. We handle indexing dynamic arrays
the same as indexing other arrays, and hence that code expects extended
to be encoded the same way.
git-svn-id: trunk@34116 -
Reset tstoredsymtable.init_final_check_done when a symbol is added or removed as otherwise property getters in a record *before* any managed field would trigger it, thus leading to the record being considered as "non-managed".
git-svn-id: trunk@34088 -
Previously we had the following approach:
- classes that implemented interfaces had an interface table
- classes that didn't implement an interface, but inherited from a class that did had a Nil entry
- classes that didn't implement any interface (including their parents) had a reference to FPC_EMPTYINTF (this was to optimize lookups)
Now the approach is as follows:
- classes that implement an interface or have a parent that implements an interface have an interface table; if the class itself doesn't implement an interface then the count will be 0
- classes that don't implement an interface at all (neither them nor their parents) have a Nil interface table
This way FPC_EMPTYINTF can be removed without sacrificing at least the optimization for classes without any interface. For classes that have parents with interfaces there will be a small speed penalty due to an additional lookup for the counter.
git-svn-id: trunk@34087 -
always be different from the old location, since we just allocated
the registers for the new one above. Should the old registers ever
be needed again for tai_varloc: rr.old/rr.oldhi contains it
git-svn-id: trunk@34086 -
initialloc was already set afterwards, now it's also done in the final
case (and allocating the initial location should be different from
setting the current location)
git-svn-id: trunk@34085 -
+ Make sure that a lone reference to DGROUP also generates a 'GROUP DGROUP' statement
+ Add %LINE support
+ Add $DEBUG for i8086 nasm
git-svn-id: trunk@34080 -
is reset (mantis #28814)
o if they are freed in end_of_parsing, they need to be recreated in case the
unit needs to be recompiled anyway during the current run
o in other cases they need to be reset since they will be repopulated during
the recompilation
git-svn-id: trunk@34069 -
compiler/ngenutil.pas, tnodeutils:
* InsertThreadvarTablesTable: reference a unit's (and the program's) threadvar table using a indirect symbol
* InsertThreadvars: generate an indirect symbol for the threadvar table
rtl/inc/threadvr.inc:
* TltvInitTablesTable: add an additional indirection for the tables field
git-svn-id: trunk@34043 -
these are generated after the other specialisation methods (via
add_synthetic_method_implementations, rather than via
generate_specialization_procs)
o fixes crash in tests/test/jvm/tw20212.pp
git-svn-id: trunk@34036 -
generator to the typecheck pass, so that it also works for platforms
that use the parentfpstruct way to handle accesses to nested frames
in case the array has been migrated to such a parentfpstruct
o additionally, the number of comparisons for such range checks
has been reduced from 3 (for signed indices) or 2 (for unsigned
indices) to 1 in all cases
o the range checking code is disabled for the JVM target, as the
JVM automatically range checks all array accesses itself anyway
git-svn-id: trunk@34034 -
it was currently broken as the specialization was declared
with local bind type, which generated no symbol at all
with the internal ogomf writer.
git-svn-id: trunk@34020 -
* Fix "-CX -al" use for i8086, because it was currently broken
-al triggered switch to nasm external assembler but with smart linking,
this should also generate a switch to external assembler.
git-svn-id: trunk@34017 -