Commit Graph

34828 Commits

Author SHA1 Message Date
Jonas Maebe
b8f6c42ec7 * don't insert checkcast operations for types that are considered to be
te_equal

git-svn-id: branches/jvmbackend@18529 -
2011-08-20 08:07:35 +00:00
Jonas Maebe
e8ec2c45af * fixed invokeinterface usage: must also specify the number of stack
slots used by the call

git-svn-id: branches/jvmbackend@18528 -
2011-08-20 08:07:30 +00:00
Jonas Maebe
c9537e3347 + support for non-array/record var parameter on the JVM target using
copy-in/out

git-svn-id: branches/jvmbackend@18527 -
2011-08-20 08:07:24 +00:00
Jonas Maebe
e7eb34e3a6 * make current_except_loc also valid while processing the default exception
block, since it can contain an anonymous "raise" statement to reraise
    the exception

git-svn-id: branches/jvmbackend@18526 -
2011-08-20 08:07:17 +00:00
Jonas Maebe
f75a5895d8 * fixed crash for global constants after previous change
git-svn-id: branches/jvmbackend@18525 -
2011-08-20 08:07:12 +00:00
Jonas Maebe
a6e196bfd6 * don't write local constants of procedures, because their names may clash
(the JVM doesn't have a concept of local constants, so they were made
     global)

git-svn-id: branches/jvmbackend@18524 -
2011-08-20 08:07:07 +00:00
Jonas Maebe
845f50448c + support for qword div/mod via helper (the JVM only supports signed
64 bit division natively)

git-svn-id: branches/jvmbackend@18523 -
2011-08-20 08:07:02 +00:00
Jonas Maebe
be1ff9ff92 * fixed handling of OP_SHL,OP_SHR,OP_SAR in op_ref_stack (second operand
is always a 32 bit int)

git-svn-id: branches/jvmbackend@18522 -
2011-08-20 08:06:57 +00:00
Jonas Maebe
2bb13723ae * don't use raw bitcasts for tc_int_2_real type conversions
git-svn-id: branches/jvmbackend@18521 -
2011-08-20 08:06:49 +00:00
Jonas Maebe
6a6ab5beac * converted SAR code to hlcgobj
git-svn-id: branches/jvmbackend@18520 -
2011-08-20 08:06:44 +00:00
Jonas Maebe
dbaaf1c3cd * fixed copy/paste errors in a_op_reg_ref() from a_op_ref_reg()
git-svn-id: branches/jvmbackend@18519 -
2011-08-20 08:06:39 +00:00
Jonas Maebe
3e5b70d80d * cpu64bitaddr -> cpu64bitalu check to determine whether we need special
handling for 64 add-nodes
  * call the generic ordinal handler for 64 add nodes on the JVM

git-svn-id: branches/jvmbackend@18518 -
2011-08-20 08:06:35 +00:00
Jonas Maebe
bd69e52451 * fixed writing string constants > 255 characters
git-svn-id: branches/jvmbackend@18517 -
2011-08-20 08:06:30 +00:00
Jonas Maebe
6e0b73ad88 * handle string/jlstring/jlobject typecasts properly again after the reworked
typeconversion handling
  + support for class reference types in the JVM (although without class virtual
    methods, they're not that useful)

git-svn-id: branches/jvmbackend@18516 -
2011-08-20 08:06:25 +00:00
Jonas Maebe
10a7532968 * differentiate between typecasts on the assignment side or not, because we
cannot insert typecasting checks on the assignment side, only on the
    values that are being assigned
   o since valid_for_assignment() is called in tassignmentnode.typecheckpass()
     after typecheckpassing left and right, moved the conversion of the
     typecheck nodes into JVM-specific constructs from typecheckpass to
     pass_1, so that they can use the information whether they are on
     the assignment side or not
  * forbid casting a child type to a parent type on the assignment side on
    managed platforms, because that circumvents the type checking

git-svn-id: branches/jvmbackend@18515 -
2011-08-20 08:06:20 +00:00
Jonas Maebe
77707a447e * fixed fake ansistring length() support
git-svn-id: branches/jvmbackend@18514 -
2011-08-20 08:06:14 +00:00
Jonas Maebe
50dd6489c4 * support default properties for Java classes
git-svn-id: branches/jvmbackend@18513 -
2011-08-20 08:06:09 +00:00
Jonas Maebe
80a63197e3 + support for unaryminus for the JVM target (integer via generic code, float
JVM-specific code)

git-svn-id: branches/jvmbackend@18512 -
2011-08-20 08:06:05 +00:00
Jonas Maebe
f764a72d85 * fixed evaluation stack height count for OP_NEG and non-64 bit opertions
git-svn-id: branches/jvmbackend@18511 -
2011-08-20 08:06:00 +00:00
Jonas Maebe
694ccf3df3 + dummy support for untyped var/const/out parameters on the JVM target
o includes basic "auto-boxing" infrastructure to support Delphi.NET-
     compatible untyped parameters as described at
     http://hallvards.blogspot.com/2007/10/dn4dp24-net-vs-win32-untyped-parameters.html

git-svn-id: branches/jvmbackend@18510 -
2011-08-20 08:05:54 +00:00
Jonas Maebe
4c152ccb7d * converted tcgnotnode.second_integer() to hlcg
git-svn-id: branches/jvmbackend@18509 -
2011-08-20 08:05:48 +00:00
Jonas Maebe
3259eae110 * fixed typecasting checks from/to arrays of records
git-svn-id: branches/jvmbackend@18508 -
2011-08-20 08:05:43 +00:00
Jonas Maebe
739c654e3a + support for main programs for the JVM target
o moved several routines from pmodules to ngenutil and overrode them
     in njvmutil (for unit initialisation tables, resource strings, ...)
   o force the evaluation stack size to at least 1 for the main program,
     because the unit initialisation triggers are inserted there afterwards
     and they require one stack slot

git-svn-id: branches/jvmbackend@18507 -
2011-08-20 08:05:38 +00:00
Jonas Maebe
e775e2d9ae * moved gen_entry_code/gen_exit_code from ncgutil to hlcgobj,
and overrode both with empty stubs for the JVM

git-svn-id: branches/jvmbackend@18506 -
2011-08-20 08:05:33 +00:00
Jonas Maebe
f20e347c7e * dummy support for copying arrays of variant/set
git-svn-id: branches/jvmbackend@18505 -
2011-08-20 08:05:28 +00:00
Jonas Maebe
7a5d334951 + support for copy(dynarray)
git-svn-id: branches/jvmbackend@18504 -
2011-08-20 08:05:23 +00:00
Jonas Maebe
ecba07c6a8 * greatly simplified dynamic array handling by making use of the
java.lang.reflect functionality

git-svn-id: branches/jvmbackend@18503 -
2011-08-20 08:05:17 +00:00
Jonas Maebe
6c35ea202b + added several reflection classes for use in array processing
git-svn-id: branches/jvmbackend@18502 -
2011-08-20 08:05:12 +00:00
Jonas Maebe
49de6346ce * replaced manual array copy loops with calls to JLSystem.arraycopy(); still
separate helper per array element type because there is no generic array
    type, and we need to get the length of the arrays

git-svn-id: branches/jvmbackend@18501 -
2011-08-20 08:05:07 +00:00
Jonas Maebe
622107c605 * moved support for copy() from pinline to ninl, so it can be (partially)
overridden for targets that require it

git-svn-id: branches/jvmbackend@18500 -
2011-08-20 08:05:02 +00:00
Jonas Maebe
c75246706d + stubbed ansistring support (using ansistrings compiles, but does not
generate working code)

git-svn-id: branches/jvmbackend@18499 -
2011-08-20 08:04:57 +00:00
Jonas Maebe
d1a1d30e04 * unless compiled with -dnounsupported, the compiler will now accept not
only JVM constructs that are already implemented, but also ones that
    will be supported in the future but that aren't implemented yet (to
    make it easier to already adapt code to the future changes)

git-svn-id: branches/jvmbackend@18498 -
2011-08-20 08:04:51 +00:00
Jonas Maebe
4491dafd48 * exit once we've found a target-specific handler for a type
conversion node so later checks won't try to further convert it

git-svn-id: branches/jvmbackend@18497 -
2011-08-20 08:04:45 +00:00
Jonas Maebe
a729201e37 * map normal sets to R_ADDRESSREGISTER
git-svn-id: branches/jvmbackend@18496 -
2011-08-20 08:04:40 +00:00
Jonas Maebe
99177a75fb * tprocdef -> tabstractprocdef typecasts so the code will also work
when calling procvars is supported

git-svn-id: branches/jvmbackend@18495 -
2011-08-20 08:04:35 +00:00
Jonas Maebe
fab08ca975 * allow classrefdef declarations for java classes (not yet properly
handled though)

git-svn-id: branches/jvmbackend@18494 -
2011-08-20 08:04:30 +00:00
Jonas Maebe
f2374ce24d * save block_type before creating a temporary scanner and restore afterwards,
because creating a new scanner sets the block_type back to bt_general
    (while we want to inject something in the current context)

git-svn-id: branches/jvmbackend@18493 -
2011-08-20 08:04:25 +00:00
Jonas Maebe
be92f47cc7 * don't simply replace the resultdef of typeconverted nodes if the new
and old def have a different deftype (see added comment why)

git-svn-id: branches/jvmbackend@18492 -
2011-08-20 08:04:21 +00:00
Jonas Maebe
df7100ff80 + support for anonymous record types for the JVM targets: automatically
generate a name and typesym for them

git-svn-id: branches/jvmbackend@18491 -
2011-08-20 08:04:16 +00:00
Jonas Maebe
4c0849a592 * fixed fpc_unicodestr_compare_equal (has to return 0 in case of
equality, not 1)

git-svn-id: branches/jvmbackend@18490 -
2011-08-20 08:04:11 +00:00
Jonas Maebe
1daff40e8e * fixed subscripting records containing unicodestrings and other
traditionally reference-counted types on the JVM target

git-svn-id: branches/jvmbackend@18489 -
2011-08-20 08:04:06 +00:00
Jonas Maebe
f27ebf8b6d + explicitly add constructors of parent class that do not appear in the
current class, since constructors are not automatically inherited in
    Java
   o tprocdef.getcopy() implementation, which returns an (unfinished) copy
     of a tprocdef. Finalise by calling symcreat.finish_copied_procdef()
   o made it possible to specify an existing procdef as argument to
     read_proc(), in which case it won't try to parse a procedure declaration,
     but only a body and associate it with the passed procdef. This is
     required for the inherited constructor support, since we cannot generate
     a textual representation of inherited constructors that is guaranteed to
     parse in the context of the current unit (e.g., if they use types from
     a unit that is not in the uses clause of the current unit)
   o folded tprocsym.find_procdef_bypara_no_rettype() into
     Tprocsym.Find_procdef_bypara, by interpreting specifying nil as
     retdef as not having to check the return def (required to compare
     parent constructors with child constructors to see whether they
     match, since the returndef will always be the current class type)

git-svn-id: branches/jvmbackend@18488 -
2011-08-20 08:04:01 +00:00
Jonas Maebe
8649788b7f * typecast the argument and result type of the setlength() helper to
the types as declared in the system unit, since they can also be
    used with equivalent but different types (e.g., byte vs shortint)

git-svn-id: branches/jvmbackend@18487 -
2011-08-20 08:03:56 +00:00
Jonas Maebe
11fbd8d9a4 + support properties in Java classes & interfaces
git-svn-id: branches/jvmbackend@18486 -
2011-08-20 08:03:52 +00:00
Jonas Maebe
ee9cfc8916 * handle constsyms without an associated type by generating a default type
git-svn-id: branches/jvmbackend@18485 -
2011-08-20 08:03:47 +00:00
Jonas Maebe
41624e8102 * pd.owner.defowner -> pd.struct
git-svn-id: branches/jvmbackend@18484 -
2011-08-20 08:03:42 +00:00
Jonas Maebe
1b401399a4 * pd.owner.defowner -> pd.struct
git-svn-id: branches/jvmbackend@18483 -
2011-08-20 08:03:38 +00:00
Jonas Maebe
834ea45be8 * (class_)constructor/destructor_head() now also parses hints,
handles modifiers and adds the procdefinition. This code was
    duplicated in several places (for objects and records)
  * properly handle introducing artificial class constructors
    (the manually constructed procdefs were wrong, now use
     str_parse_method_dec)

git-svn-id: branches/jvmbackend@18482 -
2011-08-20 08:03:33 +00:00
Jonas Maebe
474b7446ad * set isclassmethod also for class constructors/destructors in
implement_empty()

git-svn-id: branches/jvmbackend@18481 -
2011-08-20 08:03:28 +00:00
Jonas Maebe
33bd3d7aa9 * set isclassmethod also for class constructors/destructors in
implement_anon_inherited()

git-svn-id: branches/jvmbackend@18480 -
2011-08-20 08:03:23 +00:00