Commit Graph

34729 Commits

Author SHA1 Message Date
Jonas Maebe
fa49ddac11 * constructors are not inherited in Java
git-svn-id: branches/jvmbackend@18429 -
2011-08-20 07:58:53 +00:00
Jonas Maebe
42798fd26b * fixed saving/restoring scanner state
git-svn-id: branches/jvmbackend@18428 -
2011-08-20 07:58:49 +00:00
Jonas Maebe
019ca93a04 * symcreat functionality to use the parser from inside the compiler for
artificially generated stuff rather than directly working with defs/syms
   problems
    o scanner state saving/restoring, and avoiding problems in case of
      errors in the injected strings
    o in case of the actual application (adding overriding constructors):
      the parameters may be of types not visible in the current unit to
      newly written code -> can't just use the scanner...

git-svn-id: branches/jvmbackend@18427 -
2011-08-20 07:58:44 +00:00
Jonas Maebe
96b0ee0827 * added more options to format the result of tprocdef.fullprocname() via
a new customprocname() method and tprocnameoption flags (add parameter
    names, add "function"/"procedure", add name of owning struct or not,
    don't add the "class" prefix for class methods)
   Reason: for internal use by the compiler so it can output the procdef
    into something that can be fed back to the parser for reuse (seems
    easier than manually constructing a new procdef, or duplicating it
    inside of another objectdef)

git-svn-id: branches/jvmbackend@18426 -
2011-08-20 07:58:39 +00:00
Jonas Maebe
b6bae1e2e7 * do not automatically resolve constructor calls to constructors of parent
Java classes in case it is not declared in the specified Java class,
    because that will create an instance of such a parent class (in the
    future, we can may automatically clone inherited constructors)

git-svn-id: branches/jvmbackend@18425 -
2011-08-20 07:58:34 +00:00
Jonas Maebe
e58d783211 * dynamic arrays and open arrays need no conversion helper for JVM
git-svn-id: branches/jvmbackend@18424 -
2011-08-20 07:58:29 +00:00
Jonas Maebe
b4ffcaf88e * redirect the ttypeconvnode.typecheck* methods just like the firstpass
and code generation pass methods so they can be overridden

git-svn-id: branches/jvmbackend@18423 -
2011-08-20 07:58:25 +00:00
Jonas Maebe
60e0347bd9 * replaced partial manual declarations of some Java classes with
automatically generated full declarations by javapp, using the
    command line parameters:
    -protected java.lang.System java.lang.Object java.io.Serializable java.lang.Float java.lang.Double java.lang.String java.lang.StringBuilder java.lang.StringBuffer java.lang.CharSequence java.lang.AbstractStringBuilder java.lang.Appendable java.lang.Number java.lang.IndexOutOfBoundsException java.lang.RuntimeException java.lang.IllegalArgumentException java.lang.Exception java.lang.Throwable java.lang.LinkageError java.lang.Error java.lang.Comparable java.lang.Character java.text.Collator java.lang.Cloneable java.util.Comparator -i -o java_sys

git-svn-id: branches/jvmbackend@18422 -
2011-08-20 07:58:20 +00:00
Jonas Maebe
5abf6d0aa4 + thlcgobj support of the managed open array initialization fixes of
svn r17068,17071,17081,17136
  * changed all init_paras code in both thlcgobj and ncgutil to use
    location_get_data_ref() instead of direct a_load_loc_reg()/
    ref.base:=reg so it also works with the JVM target
  * changed all init_paras code so it works with targets that do
    not pass an implicit high parameter for open array (and a similar
    fix in ncgcal)
  + added support for initializing array (both regular and open)
    "out" parameters of reference counted types on the JVM target
    (the arrays will be initialised with nil rather than an empty
     array for implementation reasons, see comments in compproc.inc)
  * factored out calling of functions in the system unit directly
    from hlcgobj

git-svn-id: branches/jvmbackend@18421 -
2011-08-20 07:58:14 +00:00
Jonas Maebe
254636ab84 * don't create (useless) temporary array/record/... for the result
of functions at the caller side, since these will already be allocated
    at the callee side
  * added comment to cpupara explaining why we never allocate the function
    result on the caller side and then pass it as an invisible parameter,
    but instead always let the callee allocate it

git-svn-id: branches/jvmbackend@18420 -
2011-08-20 07:58:09 +00:00
Jonas Maebe
a82831b2e9 + support for compilerproc and "external name 'xxx'" (for normal procedures)
for the JVM target, by setting the "import_name" rather than the
    mangled name on that target

git-svn-id: branches/jvmbackend@18419 -
2011-08-20 07:58:04 +00:00
Jonas Maebe
4adb9a7ceb - removed (non-working) implicit try/finally support for the JVM, and
disabled it under all circumstances on platforms that use garbage
    collection for managed types since it's not required there

git-svn-id: branches/jvmbackend@18418 -
2011-08-20 07:58:00 +00:00
Jonas Maebe
761ff19c7f * initialise local dynamic array variables to empty arrays rather than
to "nil", so that returning them to Java code does not return a nil
    pointer

git-svn-id: branches/jvmbackend@18417 -
2011-08-20 07:57:55 +00:00
Jonas Maebe
f58de91f0c + support for JVM string constants
git-svn-id: branches/jvmbackend@18416 -
2011-08-20 07:57:50 +00:00
Jonas Maebe
7200245337 + cs_unicodestrings global switch to indicate that the default string type
is unicodestring (does *not* change the type of "char" to "unicodechar"
    (yet)). Not yet (un)selectable via a directive.
  + systems_default_unicodestring set containing systems on which the
    default string type is unicodestring

git-svn-id: branches/jvmbackend@18415 -
2011-08-20 07:57:45 +00:00
Jonas Maebe
b42731ff84 * disable SSA for the JVM target
git-svn-id: branches/jvmbackend@18414 -
2011-08-20 07:57:40 +00:00
Jonas Maebe
b5f2b463b8 * mention that Java classes also have anonymous/formal external definitions
git-svn-id: branches/jvmbackend@18413 -
2011-08-20 07:57:36 +00:00
Jonas Maebe
14e4f3459c + systems_garbage_collected_managed_types set in systems.pas
* don't call special helpers to assign refcounted types for
    systems_garbage_collected_managed_types

git-svn-id: branches/jvmbackend@18412 -
2011-08-20 07:57:31 +00:00
Jonas Maebe
87048f0cc8 * fixed range errors in case asizeint<>aint
git-svn-id: branches/jvmbackend@18411 -
2011-08-20 07:57:27 +00:00
Jonas Maebe
bf0b8503c9 * don't internalerror in decstack() if the evaluation stack becomes corrupted
in case -sr is used (-sr code cannot be compiled, and is only used for
    debugging; with -alr, the stack slot information is printed in the
    assembler file)

git-svn-id: branches/jvmbackend@18410 -
2011-08-20 07:57:22 +00:00
Jonas Maebe
2a64e411ce + generate external names for methods imported under a different name
* switched to mode delphi to avoid problems with nested types in child
    classes having the same name as nested types in the parent
  * generate skeleton classes for all internal classes that have "package"
    visibility so you can inherit from them (full definitions are not
    possible because that causes circular dependencies)
  -> the entire official JDK 1.5 interface, except for java.awt.Dialog
     (circular dependency with java.awt.Window) can now be generated using
    -a java.awt.Dialog -a sun. -a com.sun. -a apple. -protected java. javax. org.
    (on Mac OS X; the "-a apple." probably has to be changed into something
     else on other platforms)

git-svn-id: branches/jvmbackend@18409 -
2011-08-20 07:57:17 +00:00
Jonas Maebe
94ff4508c7 + support for "external name 'xxx';" for methods in external Java classes to
solve problems with identifier conflicts

git-svn-id: branches/jvmbackend@18408 -
2011-08-20 07:57:12 +00:00
Jonas Maebe
33ad6e4637 + 1/2/3-dimensional array types of the base types for use by the headers
generated by javapp

git-svn-id: branches/jvmbackend@18407 -
2011-08-20 07:57:08 +00:00
Jonas Maebe
f384c274bb * allow specifying an external name for fields in external Java classes/
interfaces using "var f: field; external name 'xxx';" (necessary for
    solving identifier clashes in imported classes)

git-svn-id: branches/jvmbackend@18406 -
2011-08-20 07:57:03 +00:00
Jonas Maebe
8199b2c6a9 * first version of javapp that can create a compilable Pascal import
unit for at least java.lang.*, java.util.* java.io.* and java.security.*,
    using the following command line paramters:
    -a sun. -a com.sun. -a javax. -protected java.lang. java.util. java.io. java.security. -o java_base

git-svn-id: branches/jvmbackend@18405 -
2011-08-20 07:56:58 +00:00
Jonas Maebe
367daf06ea + javap source code from JDK6, we be used to create javapp that
dumps Java classes in Pascal import unit format

git-svn-id: branches/jvmbackend@18404 -
2011-08-20 07:56:50 +00:00
Jonas Maebe
2f4599cc5b * also use the JVM-specific mangled name code for fields for Java interfaces
(since they also can have static fields)

git-svn-id: branches/jvmbackend@18403 -
2011-08-20 07:56:42 +00:00
Jonas Maebe
5f17c0e970 * do not check whether all interface methods are implemented in abstract
Java classes. TODO: do perform this check in the first non-abstract
    Java class that descends from such classes

git-svn-id: branches/jvmbackend@18402 -
2011-08-20 07:56:38 +00:00
Jonas Maebe
410094c1b8 * allow constants and final class vars in Java interfaces (required to
parse external interfaces)

git-svn-id: branches/jvmbackend@18401 -
2011-08-20 07:56:33 +00:00
Jonas Maebe
c0b4514b7c * also search for fully qualified nested types in Java classes/interfaces
* resolve anonymous external classes when handling nested type expressions

git-svn-id: branches/jvmbackend@18400 -
2011-08-20 07:56:29 +00:00
Jonas Maebe
30a6290aac + support for formal constants (= not typed constants) in Java interfaces,
like in Java (mainly for header translations)

git-svn-id: branches/jvmbackend@18399 -
2011-08-20 07:56:24 +00:00
Jonas Maebe
37b5c061e3 + support for "final" fields in *external* (Java and other) classes, enabled
via {$modeswitch finalfields} (on by default on the JVM target). The
    meaning is the same as in Java: a final (class) field can only be set
    in a (class) constructor of the class it's defined in, and can only be
    written once there (and *must* be set there). They are currently only
    supported for external classes since that basically turns them into
    constants, since for non-external classes we need full dataflow analysis
  o refactored pdecobj.parse_object_members() a bit in the process to reduce
    the amount of repetition (which would have been further increased for
    the support for final fields)
  o made error message about "wrong use of absolute" for fields etc generic,
    so it gives a proper error depending on which token was used (it had
    to be made generic for "final" support, but already was used for other
    things that were wrongly reported as "absolute" misusages)

git-svn-id: branches/jvmbackend@18398 -
2011-08-20 07:56:18 +00:00
Jonas Maebe
6b176351e1 * removed jvmdef.jvminternalstaticfieldname() and now use newly created
symsym.internal_static_field_name() on all platforms to construct
    the internal (hidden) name of class fields

git-svn-id: branches/jvmbackend@18397 -
2011-08-20 07:56:13 +00:00
Jonas Maebe
0be352e9a9 * don't require "override" for overriding methods in external Java classes
just like for Objective-C and C++ (to make it easier for automatic
    parsers)

git-svn-id: branches/jvmbackend@18396 -
2011-08-20 07:56:08 +00:00
Jonas Maebe
9e8bb70548 + support for abstract methods in Java classes
git-svn-id: branches/jvmbackend@18395 -
2011-08-20 07:56:03 +00:00
Jonas Maebe
121a141953 + support for final methods in Java classes
git-svn-id: branches/jvmbackend@18394 -
2011-08-20 07:55:55 +00:00
Jonas Maebe
3d4323a75d + support sealed/abstract Java classes (todo: allow abstract Java classes
to only partially implement an interface, and check in first non-abstract
    class in inheritance tree whether it implements all interface methods)

git-svn-id: branches/jvmbackend@18393 -
2011-08-20 07:55:50 +00:00
Jonas Maebe
2d5a542984 * don't allow static methods in Java interfaces
git-svn-id: branches/jvmbackend@18392 -
2011-08-20 07:55:45 +00:00
Jonas Maebe
8f2aacfed5 + support for (formal/untyped) constants (ordinal, floating point,
nil-pointers typecasted to a class type, strings)
   o escape ", \, #10 and #13 in string constants as required by Java

git-svn-id: branches/jvmbackend@18391 -
2011-08-20 07:55:41 +00:00
Jonas Maebe
737f9f5e90 * moved tabstractvarsym.jvmmangledbasename to the jvmdef unit as a separate
function, so it can be easily also used for constsym without adding
    JVM-specific routines to symtype or duplicating the routine without
    inheritance
  + added tconstsym support to jvmdef.jvmmangledbasename()

git-svn-id: branches/jvmbackend@18390 -
2011-08-20 07:55:36 +00:00
Jonas Maebe
59ccdd1de8 - removed unused local variables
git-svn-id: branches/jvmbackend@18389 -
2011-08-20 07:55:31 +00:00
Jonas Maebe
2c313e397e + support for regular arrays and open arrays
o support for copying value parameters at the callee side if they were
     passed by reference in hlcg
   o JVM g_concatcopy() implementation for arrays
   o moved code to get length of an array from njvminl to hlcgcpu so it can
     be reused elsewhere as well
   o export array copy helpers from system unit for use when assigning one
     array to another
   o some generic support for types that are normally not implicit pointers,
     but which are for the JVM target (such as normal arrays)
  * handle assigning nil to a dynamic array by generating a setlength(x,0)
    node instead of by hardcoding a call to fpc_dynarray_clear, so
    target-specific code can handle it if required
  * hook up gethltemp() for JVM ttgjvm so array temps are properly
    allocated

git-svn-id: branches/jvmbackend@18388 -
2011-08-20 07:55:27 +00:00
Jonas Maebe
0a3a62811b + try/except and try/finally support for JVM target:
o always create exceptvarsym entry for on-nodes (on all targets) to remove
     some special cases when an unnamed exception was caught
   o the JVM tryfinally node generates the finally code twice: once for the
     case where no exception occurs, and once when it does occur. The reason
     is that the JVM's static bytecode verification otherwise cannot prove
     that we will only reraise the caught exception when we caught one in
     the first place (the old "jsr" opcode to de-duplicate finally code
     is no longer used in JDK 1.6 because it suffered from the same problem,
     see Sun Java bug
     http://webcache.googleusercontent.com/search?q=cache:ZJFtvxuyhfMJ:bugs.sun.com/bugdatabase/view_bug.do%3Fbug_id%3D6491544 )

git-svn-id: branches/jvmbackend@18387 -
2011-08-20 07:55:21 +00:00
Jonas Maebe
9a3714ce42 * changed identifier of system unit from "System" into "system" to prevent name
clash with Java's "System" (from e.g. System.out.println())

git-svn-id: branches/jvmbackend@18386 -
2011-08-20 07:55:15 +00:00
Jonas Maebe
d8191d48ab * also delete ppcjvm in the execlean target
git-svn-id: branches/jvmbackend@18385 -
2011-08-20 07:55:08 +00:00
Jonas Maebe
be4a27657b + support for nested Java classes
o tobjectdef.jvm_full_typename() now gets an extra parameter to determine
     whether or not the package name should be prepended, so it can be easily
     used to generate the name of the .j file and of the class name inside it

git-svn-id: branches/jvmbackend@18384 -
2011-08-20 07:55:03 +00:00
Jonas Maebe
fde622e050 * generate a loadvmtaddrnode wrapper around Java objectdef typenode arguments
to tasnode (like for regular Object Pascal classes)
  * don't collect WPO information for Java classes in tloadvmtaddrnode.pass_1()
    (devirtualization can't work for Java, since classes can always be loaded
     at run time, except for final/sealed classes -- but that's not yet
     implemented)
  + JVM is-node support, unified JVM type checking codegen for is- and as-nodes

git-svn-id: branches/jvmbackend@18383 -
2011-08-20 07:54:57 +00:00
Jonas Maebe
c1abc4a275 * call cgmessage() instead of message() for errors in
tloadvmtaddrnode.pass_typecheck(), because tas/isnode().pass_typecheck()
    checks codegenerror afterwards to determine whether an error occurred

git-svn-id: branches/jvmbackend@18382 -
2011-08-20 07:54:49 +00:00
Jonas Maebe
608572c63a * removed unused local variables
* fixed some "uninitialised function result" warnings for dummy routines

git-svn-id: branches/jvmbackend@18381 -
2011-08-20 07:54:37 +00:00
Jonas Maebe
678e6dceef * write floating point numbers using hex notation to prevent data loss
(requires patched Jasmin)

git-svn-id: branches/jvmbackend@18380 -
2011-08-20 07:54:29 +00:00