Commit Graph

34982 Commits

Author SHA1 Message Date
Jonas Maebe
4e0ffdebfd * FPCJDynArrTypeEnumSet/FPCJDynArrTypeBitSet support in fpc_dynarray_copy()
git-svn-id: branches/jvmbackend@18683 -
2011-08-20 08:24:20 +00:00
Jonas Maebe
e61bc16799 - remove nounsupported ifdefs for formaldef handling
git-svn-id: branches/jvmbackend@18682 -
2011-08-20 08:24:12 +00:00
Jonas Maebe
cef61300ff + ttgobj.gethltemptyped() routine for allocating managed types with high level
code generator support
  * refactored some internal temp generator code

git-svn-id: branches/jvmbackend@18681 -
2011-08-20 08:24:07 +00:00
Jonas Maebe
085d0efead * some fixes for fake procvar support
git-svn-id: branches/jvmbackend@18680 -
2011-08-20 08:24:02 +00:00
Jonas Maebe
34bfe0bbfd * reparsed with varags -> const open array change
git-svn-id: branches/jvmbackend@18679 -
2011-08-20 08:23:56 +00:00
Jonas Maebe
35cb8516ff + support for detecting varargs functions -> mark their open array
parameters as const, since the callee cannot modify the array
    itself in that case

git-svn-id: branches/jvmbackend@18678 -
2011-08-20 08:23:51 +00:00
Jonas Maebe
e30319561f * correctly set the external name of nested classes (should not
include the parent class names, those are added by the compiler)

git-svn-id: branches/jvmbackend@18677 -
2011-08-20 08:23:45 +00:00
Jonas Maebe
586d4f4108 * fixed keeping track of the number of abstract methods in external classes
git-svn-id: branches/jvmbackend@18676 -
2011-08-20 08:23:39 +00:00
Jonas Maebe
d6966e545b + support for formal var/out parameters on the JVM target:
o primitive types are first boxed
   o the parameter is passed inside an array of one class instance
   o changing the parameter inside the routine (by assigning a value to it
     like in Delphi.NET and different from regular Pascal code) will replace
     this class instance (again boxing the value if required)
   o on return, the class instance is extracted, unboxed if required, and
     assigned back to the original location
   o formal const parameters are handled without the extra array indirection,
     since they cannot be changed

  TODO: while writing tjvmcallparanode.handleformalcopyoutpara() I forgot that
    calling getcopy on ttemprefnodes whose ttempcreatenode hasn't been copied
    yet works fine, so that code is more complex than needed. Still have to
    fix.

git-svn-id: branches/jvmbackend@18675 -
2011-08-20 08:23:33 +00:00
Jonas Maebe
5bf16214cd * changed initialization of records from constructing a new instance and
copying that over the old one into calling a dedicated fpcInitializeRec()
    method that initializes the required fields. The reason is that this
    initialization is performed for out-parameters, and the fpcDeepCopy()
    method (used to copy one instance over another) has an out-parameter
    -> infinite loop

git-svn-id: branches/jvmbackend@18674 -
2011-08-20 08:23:27 +00:00
Jonas Maebe
b52dcd4a56 * changed var-parameter of secondpass() into a value parameter: secondpass
should never change any nodes, and this allows passing properties to
    secondpass

git-svn-id: branches/jvmbackend@18673 -
2011-08-20 08:23:22 +00:00
Jonas Maebe
40cf2cefa0 * when the user calls initialize(), force initialization to happen on the
JVM platform (normally it's not necessary because all types are
    automatically initialized)

git-svn-id: branches/jvmbackend@18672 -
2011-08-20 08:23:16 +00:00
Jonas Maebe
d0663411a5 * fixed order of operands on the jvm stack in case of a setlength(x,0) call
for a static field

git-svn-id: branches/jvmbackend@18671 -
2011-08-20 08:23:10 +00:00
Jonas Maebe
ff37507bca * save/result nestsym to ppufile for inline routines
git-svn-id: branches/jvmbackend@18670 -
2011-08-20 08:23:04 +00:00
Jonas Maebe
3a983d8ea5 * also escape the field names of records when used as source in fpcDeepCopy()
git-svn-id: branches/jvmbackend@18669 -
2011-08-20 08:22:59 +00:00
Jonas Maebe
7286e3b645 * when determining the type to use for checkcast, first always dereference
pointers to implicit pointer types so that afterwards we can set the
    appropriate corresponding class type

git-svn-id: branches/jvmbackend@18668 -
2011-08-20 08:22:52 +00:00
Jonas Maebe
6cced31157 * treat conversions involving arrays of sets also as pointer conversions
git-svn-id: branches/jvmbackend@18667 -
2011-08-20 08:22:47 +00:00
Jonas Maebe
94be1980b4 * fixed type conversions between signed and unsigned ordinals of the same
size when stored in memory

git-svn-id: branches/jvmbackend@18666 -
2011-08-20 08:22:42 +00:00
Jonas Maebe
b556c05b1a * properly deal with reference temps in tcgtempdeletenode.pass_generate_code
git-svn-id: branches/jvmbackend@18665 -
2011-08-20 08:22:38 +00:00
Jonas Maebe
102e9cf8f4 * mark implicitly created typesyms immediately as "referenced" to avoid hints
about them not being used

git-svn-id: branches/jvmbackend@18664 -
2011-08-20 08:22:33 +00:00
Jonas Maebe
1b1face692 * fixed signature in enum class header (missed L-prefix)
git-svn-id: branches/jvmbackend@18663 -
2011-08-20 08:22:28 +00:00
Jonas Maebe
37aa2d8443 + full support for sets on the JVM target
o sets of enums are handled as JUEnumSet instances, others as JUBitSet
     derivatives (both smallsets and varsets, to make interoperability with
     Java easier)
   o special handling of set constants: these have to be constructed at run
     time. In case of constants in the code, create an internal constsym to
     represent them. These and regular constsyms are then aliased by an
     another internal staticvarsym that is used to initialise them in the
     unit initialisation code.
   o until they are constructed at run time, set constants are encoded as
     constant Java strings (with the characters containing the set bits)
   o hlcgobj conversion of tcginnode.pass_generate_code() for the genjumps
     part (that's the only part of the generic code that's used by the JVM
     target)
   o as far as explicit typecasting support is concerned, currently the
     following ones are supported (both from/to setdefs): ordinal types,
     enums, any other set types (whose size is the same on native targets)
   o enum setdefs also emit signatures
   o overloading routines for different ordinal set types, or for different
     enum set types, is not supported on the JVM target

git-svn-id: branches/jvmbackend@18662 -
2011-08-20 08:22:22 +00:00
Jonas Maebe
9ebf623895 + tcallnode.createinternmethod() constructor to easily call methods
(both instance and class/static methods)

git-svn-id: branches/jvmbackend@18661 -
2011-08-20 08:22:15 +00:00
Jonas Maebe
c387bc0c27 * allow overriding first_IncludeExclude
git-svn-id: branches/jvmbackend@18660 -
2011-08-20 08:22:10 +00:00
Jonas Maebe
67a142c56e * fixed dereferencing pointers to JVM implicit pointer types in case the
pointer was in a register (has to be put into memory, because otherwise
    the compiler thinks that the entire type is stored in a register instead
    of only its address)

git-svn-id: branches/jvmbackend@18659 -
2011-08-20 08:22:05 +00:00
Jonas Maebe
51095fdd28 * make it possible to override parts of the typed constant code generation
by platform-specific units

git-svn-id: branches/jvmbackend@18658 -
2011-08-20 08:21:59 +00:00
Jonas Maebe
402390a25d * same extension as other files
git-svn-id: branches/jvmbackend@18657 -
2011-08-20 08:21:54 +00:00
Jonas Maebe
956d63da9e * only treat Java interfaces and classes as equivalent to classdefs rather
than any objectdef

git-svn-id: branches/jvmbackend@18656 -
2011-08-20 08:21:49 +00:00
Jonas Maebe
625f52b7e4 * make sure that int->int conversions are handled by the generic code
* handle class->interface conversions by JVM-specific code

git-svn-id: branches/jvmbackend@18655 -
2011-08-20 08:21:44 +00:00
Jonas Maebe
67ce687683 * don't keep the original location in case of 2->4 byte ordinal type
conversions because the sign may not be correct in case the value comes
    from Java code

git-svn-id: branches/jvmbackend@18654 -
2011-08-20 08:21:39 +00:00
Jonas Maebe
40fdc62e74 + support for automatically converting char/widechar to java.lang.String
git-svn-id: branches/jvmbackend@18653 -
2011-08-20 08:21:34 +00:00
Jonas Maebe
4af73c0c51 + also support sp_internal for constsyms (mark them as "synthetic")
git-svn-id: branches/jvmbackend@18652 -
2011-08-20 08:21:29 +00:00
Jonas Maebe
5ea497857d + FpcEnumValueObtainable interface that's implemented by all FPC
enums (for use in set factory helpers)

git-svn-id: branches/jvmbackend@18651 -
2011-08-20 08:21:24 +00:00
Jonas Maebe
386136ba7c * declare enumclass "values" method as "static" (necessary so that the JVM
recognises the class as a proper enum class)

git-svn-id: branches/jvmbackend@18650 -
2011-08-20 08:21:19 +00:00
Jonas Maebe
112d17af84 + support for local enum types (defined in procedures), by stuffing their
corresponding classes into the global symtable ("local classes" don't
    exist/work)

git-svn-id: branches/jvmbackend@18649 -
2011-08-20 08:21:15 +00:00
Jonas Maebe
5ad5a6f326 * small optimization for g_getarraylen
git-svn-id: branches/jvmbackend@18648 -
2011-08-20 08:21:10 +00:00
Jonas Maebe
b65422cd59 * make sure that the real name of enums is not replaced by the alias
typesyms we create

git-svn-id: branches/jvmbackend@18647 -
2011-08-20 08:21:05 +00:00
Jonas Maebe
cfe125198c * always return true from tjvmnodeutils.force_init(), because when this
routine is called we don't know yet whether it has to be forced or not
    for the JVM target (staticvarsyms that need initialization may still be
    created during pass1 of the main program/unit code)

git-svn-id: branches/jvmbackend@18646 -
2011-08-20 08:21:01 +00:00
Jonas Maebe
2376003cd0 * wrap the init/finalization code even when it is implicitly generated
* only wrap the init/finalization code after the main program has been
    completely processed (pass1, codegen), because this may influence
    the required wrapping in case of the JVM target
  * replace periods with slashes in the package name when constructing
    the classes corresponding to the units (to execute their initialization
    code) -- didn't notice this was wrong previously because due to the
    incomplete wrapping, they were never being initialized until now

git-svn-id: branches/jvmbackend@18645 -
2011-08-20 08:20:56 +00:00
Jonas Maebe
466f6751c8 + getpointerdef() function that returns a pointerdef for the passed def.
Multiple calls to getpointerdef() for the same def in a single module
    return the same pointerdef

git-svn-id: branches/jvmbackend@18644 -
2011-08-20 08:20:51 +00:00
Jonas Maebe
9d4162d840 * ifdefed jvmdef usage
git-svn-id: branches/jvmbackend@18643 -
2011-08-20 08:20:43 +00:00
Jonas Maebe
ae554ba1d3 * ifdefed pjvm usage
git-svn-id: branches/jvmbackend@18642 -
2011-08-20 08:20:38 +00:00
Jonas Maebe
ec33f745a2 * ifdefed jvmdef usage
git-svn-id: branches/jvmbackend@18641 -
2011-08-20 08:20:33 +00:00
Jonas Maebe
bd9e0b1a45 * ifdefed pjvm usage
git-svn-id: branches/jvmbackend@18640 -
2011-08-20 08:20:28 +00:00
Jonas Maebe
93ddf11143 * ifdefed pjvm usage
git-svn-id: branches/jvmbackend@18639 -
2011-08-20 08:20:23 +00:00
Jonas Maebe
75e259e426 * ifdef'ed jvmdef/pjvm usage for jvm target
git-svn-id: branches/jvmbackend@18638 -
2011-08-20 08:20:18 +00:00
Jonas Maebe
e534a17c01 - removed unused scanner.tscannerstate, inserttext_begin and inserttext_end
(leftovers from the initial symcreat implementations that didn't work)

git-svn-id: branches/jvmbackend@18637 -
2011-08-20 08:20:13 +00:00
Jonas Maebe
90d82ad826 * fixed unit reloading after the addition of the def field to tcgpara
as used in the function return location (and loading in case of
    an explicit para location)

git-svn-id: branches/jvmbackend@18636 -
2011-08-20 08:17:17 +00:00
Jonas Maebe
6154f1b0d9 * keep track of the number of abstract methods per class via a counter
* use this counter to mark classes containing abstract methods as
    "abstract" in the bytecode per the JVM spec
  * also use the counter to short-circuit printing of all abstract
    methods in a class when creating a new instance (we build the list
    of abstract methods every time a new instance is created, which is
    a waste of time if there are none in the first place)

git-svn-id: branches/jvmbackend@18635 -
2011-08-20 08:17:12 +00:00
Jonas Maebe
92fbbcff88 * also write definitions for abstract methods
* write "abstract" modifier for abstract classes

git-svn-id: branches/jvmbackend@18634 -
2011-08-20 08:17:07 +00:00