Commit Graph

34981 Commits

Author SHA1 Message Date
Jonas Maebe
1bc846dd3c + TSymtablestack.getcopyuntil() method that creates a copy of a
symtablestack up to and including a particular symtable

git-svn-id: branches/jvmbackend@18582 -
2011-08-20 08:12:29 +00:00
Jonas Maebe
e9e72e6de0 * fixed copyright date
git-svn-id: branches/jvmbackend@18581 -
2011-08-20 08:12:24 +00:00
Jonas Maebe
528882dc68 * allow typeconversions of formaldef to anything else (make sure to
transform into an as-node when converting into a class/array type)

git-svn-id: branches/jvmbackend@18580 -
2011-08-20 08:12:20 +00:00
Jonas Maebe
c995e56370 * internalerror if constructor not found in record
git-svn-id: branches/jvmbackend@18579 -
2011-08-20 08:12:15 +00:00
Jonas Maebe
223057f1a7 + support for is/as and Java interfaces
git-svn-id: branches/jvmbackend@18578 -
2011-08-20 08:12:09 +00:00
Jonas Maebe
225e866800 - removed superfluous check that could use uninitialized location
git-svn-id: branches/jvmbackend@18577 -
2011-08-20 08:12:04 +00:00
Jonas Maebe
8ec21eb426 * fixed flow control handling in case of empty try-blocks and in case of
no default exception catching block

git-svn-id: branches/jvmbackend@18576 -
2011-08-20 08:11:59 +00:00
Jonas Maebe
1dca48bce5 * set reused left node to nil for JVM loadvmtaddrnodes that need to call a
helper
  * never call a helper for classrefdefs (in that case we have to load the
    classrefdef itself, not the classrefdef for the class representing
    classrefdefs)

git-svn-id: branches/jvmbackend@18575 -
2011-08-20 08:11:54 +00:00
Jonas Maebe
0706cb5eb6 + support for pointers to types that are implicit pointer types in the JVM
(non-dynamic arrays, records, shortstrings)
  - removed the ability to typecast such types directly into related class
    types, you have to use the @-operator first now to get a pointer to
    the type
   o updated the RTL and internal compiler code to properly use this
     new convention
   o allowed removing several special cases from
     tjvmtypeconvnode.target_specific_general_typeconv(), and that
     method can probably be removed completely over time
  * no longer give compile time errors for pointer-related typecasts that
    will fail at run time, because the checking was too complex and could
    be worked around via actual pointer typecasts anyway
  * removed some unnecessary checkcast operations (for shortstring/
    shortstringclass)

git-svn-id: branches/jvmbackend@18574 -
2011-08-20 08:11:49 +00:00
Jonas Maebe
207a4a32d3 * internalerror in case a stringdef manages to get through to
tjvmvecnode.pass_generate_code() (should be handled earlier)

git-svn-id: branches/jvmbackend@18573 -
2011-08-20 08:11:43 +00:00
Jonas Maebe
564b8a2cf7 - removed "{$ifdef unsupported}" block for jvm (is handled in njvmmem
already)

git-svn-id: branches/jvmbackend@18572 -
2011-08-20 08:11:38 +00:00
Jonas Maebe
71cd31159c * encode java_jlstring instead of using a hardcoded string constant for
the type encoding of unicodestring

git-svn-id: branches/jvmbackend@18571 -
2011-08-20 08:11:33 +00:00
Jonas Maebe
6857dde33e + shortstring support for the JVM target (including accessing character 0 as
the "length byte")

git-svn-id: branches/jvmbackend@18570 -
2011-08-20 08:11:28 +00:00
Jonas Maebe
f2d3203bb6 * commented out unimplemented pos() variant
git-svn-id: branches/jvmbackend@18569 -
2011-08-20 08:11:22 +00:00
Jonas Maebe
13cf0e031e * removed unused variables
* char -> ansichar

git-svn-id: branches/jvmbackend@18568 -
2011-08-20 08:11:17 +00:00
Jonas Maebe
87f812c778 * fixed typo in comment
git-svn-id: branches/jvmbackend@18567 -
2011-08-20 08:11:12 +00:00
Jonas Maebe
db1d22aeae * fixed header comments
git-svn-id: branches/jvmbackend@18566 -
2011-08-20 08:11:08 +00:00
Jonas Maebe
eb40756d35 * zero-extend byte/word field loads (get/putstatic sign-extends)
* move the incstack() from a load before the potential "and" to
    zero-extend, so that the maximum stack height get calculated
    properly

git-svn-id: branches/jvmbackend@18565 -
2011-08-20 08:11:03 +00:00
Jonas Maebe
baad29373e + ansistr_to_shortstr and vice versa stub helpers
git-svn-id: branches/jvmbackend@18564 -
2011-08-20 08:10:54 +00:00
Jonas Maebe
6374b473ff * convert string constants passed to JLString to unicode
git-svn-id: branches/jvmbackend@18563 -
2011-08-20 08:10:46 +00:00
Jonas Maebe
446d91eaab + ansistring support. Items of note:
o support for ansistring constants. It's done via a detour because the
      JVM only supports UTF-16 string constants (no array of byte or anything
      like that): store every ansicharacter in the lower 8 bits of an
      UTF-16 constant string, and at run time copy the characters to an
      ansistring. The alternative is to generate code that stores every
      character separately to an array.
    o the base ansistring support is implemented in a class called
      AnsistringClass, and an ansistring is simply an instance of this
      class under the hood
    o the compiler currently does generate nil pointers as empty
      ansistrings unlike for unicodestrings, where we always
      explicitly generate an empty string. The reason is that
      unicodestrings are the same as JLString and hence common
      for Java interoperation, while ansistrings are unlikely to
      be used in interaction with external Java code

  * fixed indentation

git-svn-id: branches/jvmbackend@18562 -
2011-08-20 08:10:39 +00:00
Jonas Maebe
aa1f299a17 + added hook for "individual value to open array of one element"-conversion,
so it can be intercepted by the JVM backend (it has to create an actual
    array)
  + JVM support for the elem_2_open_array hook

git-svn-id: branches/jvmbackend@18561 -
2011-08-20 08:10:31 +00:00
Jonas Maebe
8248e6762f * support opcode+operands > 255 characters (e.g. when loading string constants)
git-svn-id: branches/jvmbackend@18560 -
2011-08-20 08:10:26 +00:00
Jonas Maebe
0fa1c9bbdd * escape #127 under all circumstances (it's not printable)
git-svn-id: branches/jvmbackend@18559 -
2011-08-20 08:10:21 +00:00
Jonas Maebe
b370314194 * fixed typecasting to/from classrefdef
git-svn-id: branches/jvmbackend@18558 -
2011-08-20 08:10:16 +00:00
Jonas Maebe
84640fe7f0 + support for non-static class methods on the JVM target
git-svn-id: branches/jvmbackend@18557 -
2011-08-20 08:10:11 +00:00
Jonas Maebe
9de14768bb * free temp location allocated for function result if not used
* don't free function result space on stack twice if the result
    is not used but a the same time has already been stored in a
    temporary funcretnode location

git-svn-id: branches/jvmbackend@18556 -
2011-08-20 08:10:05 +00:00
Jonas Maebe
60f8254d63 * don't internalerror when converting to an open array and passing as
var/out parameter (these conversions are replaced by another
    construct on non-JVM targets, so didn't cause a problem there)

git-svn-id: branches/jvmbackend@18555 -
2011-08-20 08:10:00 +00:00
Jonas Maebe
704753d3e8 * change the resultdef of nf_load_procvar typeconversion nodes from
voidpointerdef to java_jlobject (they're generated by generic code
    in nmem; avoids an ifdef for the jvm target there)

git-svn-id: branches/jvmbackend@18554 -
2011-08-20 08:09:55 +00:00
Jonas Maebe
aaff356c6d * moved $methodpointer type construction from psystem to pdecobj for JVM,
because java_jlobject needs to be available

git-svn-id: branches/jvmbackend@18553 -
2011-08-20 08:09:50 +00:00
Jonas Maebe
58d7a86252 + stubbed formal const/var/out support
git-svn-id: branches/jvmbackend@18552 -
2011-08-20 08:09:45 +00:00
Jonas Maebe
d7e78b9f95 * correct parameter encoding of formaldef (add array type for formal const,
remove double array type for formal var/out)

git-svn-id: branches/jvmbackend@18551 -
2011-08-20 08:09:40 +00:00
Jonas Maebe
2ed430de8c * refactored and fixed procvar typeconversion checking
git-svn-id: branches/jvmbackend@18550 -
2011-08-20 08:09:35 +00:00
Jonas Maebe
d74aef86b4 - removed a useless condition in the check to determine whether or not
we have to generate an as-node for a type conversion

git-svn-id: branches/jvmbackend@18549 -
2011-08-20 08:09:31 +00:00
Jonas Maebe
1b0b6a9d6d * also print method implementation when reusing a forward definition
git-svn-id: branches/jvmbackend@18548 -
2011-08-20 08:09:26 +00:00
Jonas Maebe
f187128428 * allow addrnodes for procdef (and procvardef in TP/Delphi mode), and
for JVM implicit pointer types (-> JLObject)

git-svn-id: branches/jvmbackend@18547 -
2011-08-20 08:09:21 +00:00
Jonas Maebe
17db9ed895 * allow some more valid type conversions
git-svn-id: branches/jvmbackend@18546 -
2011-08-20 08:09:16 +00:00
Jonas Maebe
b60e50b2b0 - reverted 679f3968901f0d565644d59e046eb25d5402f027, because it requires
support for concat_multi for ansistrings to prevent compilation
    problems there

git-svn-id: branches/jvmbackend@18545 -
2011-08-20 08:09:10 +00:00
Jonas Maebe
54bb881a1b * print an error for invalid type conversions
git-svn-id: branches/jvmbackend@18544 -
2011-08-20 08:09:05 +00:00
Jonas Maebe
63962043a5 * fixed fake nested procedures support
git-svn-id: branches/jvmbackend@18543 -
2011-08-20 08:09:00 +00:00
Jonas Maebe
000c502c9c + fake shortstring temp support
git-svn-id: branches/jvmbackend@18542 -
2011-08-20 08:08:54 +00:00
Jonas Maebe
1c1fe26ebd * refactored isstringconv/isrecordconv
* fixed checking of array element compatibility (also have to check
    for both strings/records)

git-svn-id: branches/jvmbackend@18541 -
2011-08-20 08:08:49 +00:00
Jonas Maebe
8ec1ba797d * put single quotes around identifiers so they cannot be confused with
opcodes by Jasmin

git-svn-id: branches/jvmbackend@18540 -
2011-08-20 08:08:44 +00:00
Jonas Maebe
4dfdcfd139 * fixed uninitialised var-parameters in isstringconv
git-svn-id: branches/jvmbackend@18539 -
2011-08-20 08:08:39 +00:00
Jonas Maebe
bdb6cf5561 * fixed uninitialised var-parameters in isrecordconv
git-svn-id: branches/jvmbackend@18538 -
2011-08-20 08:08:34 +00:00
Jonas Maebe
278a581666 + jdk15 unit with jdk 1.5 header translation
git-svn-id: branches/jvmbackend@18537 -
2011-08-20 08:08:21 +00:00
Jonas Maebe
4cd9908339 * don't mangle local variable and parameter names using the method name,
since those names are only used for debug info. Only the names of
    staticvarsyms in local symtables (typed constants, variable initialisers)
    have to be mangled like that since they'll become fields in the global
    scope

git-svn-id: branches/jvmbackend@18536 -
2011-08-20 08:08:10 +00:00
Jonas Maebe
e403ddca0c * enabled generic multi-string concatenation optimization now that var
parameters for strings work (although they're not as efficient as
    function results for the JVM target)

git-svn-id: branches/jvmbackend@18535 -
2011-08-20 08:08:05 +00:00
Jonas Maebe
1795eff237 + support for emiting "signature" attributes for fields and methods; these
are JVM annotations used by Java's generics support. They cannot be used
    for FPC's generics support, but they are useful in other cases
  * emit classrefdefs as java.lang.Class, with a signature annotation that
    indicates which class they actually refer to

git-svn-id: branches/jvmbackend@18534 -
2011-08-20 08:08:00 +00:00
Jonas Maebe
2610cea230 - removed orphan helpers
git-svn-id: branches/jvmbackend@18533 -
2011-08-20 08:07:54 +00:00