Commit Graph

34745 Commits

Author SHA1 Message Date
Jonas Maebe
f1c7e018c4 * don't complain if the external name of a complete definition and that
of a forward definition don't match, since forward definitions can't
    have an external name (nor can they be used in a situation where it's
    necessary)

git-svn-id: branches/jvmbackend@18445 -
2011-08-20 08:00:13 +00:00
Jonas Maebe
fc7725efba + systems_managed_vm set of targets that run inside a managed vm
* don't define the pvmt (and related types) and methodpointertype
    for systems_managed_vm

git-svn-id: branches/jvmbackend@18444 -
2011-08-20 08:00:05 +00:00
Jonas Maebe
c5b39823e5 + internalerror when passing handling invalid integer size in loadstoreopc()
git-svn-id: branches/jvmbackend@18443 -
2011-08-20 07:59:59 +00:00
Jonas Maebe
009a30d8cf * reworked saving/restoring the scanner state (immediately replace scanner
with temporary one when saving, since it's also freed when restoring ->
    called replace_scanner() instead of save_scanner() now)
  * when using -vd, print out the text that is internally generated for
    injecting into the scanner

git-svn-id: branches/jvmbackend@18442 -
2011-08-20 07:59:54 +00:00
Jonas Maebe
698deb08c5 * parsed with latest version, adds "virtual" modifiers
git-svn-id: branches/jvmbackend@18441 -
2011-08-20 07:59:49 +00:00
Jonas Maebe
a6a60e3e26 * also mark all non-virtual methods as "final" (since regular methods
don't exist in Java)

git-svn-id: branches/jvmbackend@18440 -
2011-08-20 07:59:45 +00:00
Jonas Maebe
6dd7d9db41 * generate a declaration with an dynamic array and one with an open array
parameter in case of array parameters (and in case of constructors,
    make the open array as "const"; heuristic, not guaranteed 100% safe!)
  + support for generating include files rather than full units (e.g., for
    the system unit types), -i option
  * don't generate imports for anonymous inner types ($1 etc)
  * mark routines with 'package' visibility as 'public', because some packages
    are split over multiple units (system unit and jdk import unit) -> allows
    using these routines in illegal ways, which will result in run time errors
  + support to also select individual classes with the -x/-a parameters
  + add "virtual" modifier to methods where appropriate (so the compiler won't
    force it automatically anymore)

git-svn-id: branches/jvmbackend@18439 -
2011-08-20 07:59:40 +00:00
Jonas Maebe
fc2d239f95 * fixed checking for missing "override" for Java code
git-svn-id: branches/jvmbackend@18438 -
2011-08-20 07:59:35 +00:00
Jonas Maebe
30d9fdb0af + is_class_or_interface_or_objc_or_java() function
git-svn-id: branches/jvmbackend@18437 -
2011-08-20 07:59:31 +00:00
Jonas Maebe
0700e2d7ef + support for {$namespace x.y.z} directive to specify the namespace
for the current unit and all types/routines declared in it. The
    unit itself becomes a member of this namespace as well, so in
    case it's called unit1, it will be x.y.z.unit1, and type tclass
    declared in it will be x.y.z.tclass. Only used for the JVM
    target currently

git-svn-id: branches/jvmbackend@18436 -
2011-08-20 07:59:26 +00:00
Jonas Maebe
1aac04a639 * mark classes that represent units, and classes declared in the interface
of a unit, as public (the rest has "package" visibility)

git-svn-id: branches/jvmbackend@18435 -
2011-08-20 07:59:21 +00:00
Jonas Maebe
20e55cd54e * mark unit-level routines as "final", since they can't be overridden
git-svn-id: branches/jvmbackend@18434 -
2011-08-20 07:59:17 +00:00
Jonas Maebe
3f436deb16 * set the visibility of a newly create staticsymtable to vis_private
(it's used for the implementation section, corrects the visibility
     of functions in the implementation of Pascal units for the JVM target)

git-svn-id: branches/jvmbackend@18433 -
2011-08-20 07:59:12 +00:00
Jonas Maebe
d47f26bbca * for now only auto-generate a parameterless constructor in case no
constructor is declared, rather than all constructors from the parent
    class (because it cannot be done via scanner-injection, since some
    parameter types of the parent constructors may not be visible in the
    current unit, and there is no full-blown tprocdef.getcopy yet nor
    a way to replace the type of the self-parameter afterwards)
  * added sanity checks when inserting the parameterless constructor
    (check for other identifiers called "create", and other parameterless
     methods)

git-svn-id: branches/jvmbackend@18432 -
2011-08-20 07:59:08 +00:00
Jonas Maebe
c05bc8a931 * let procdef typename-related routines return ansistrings instead of
shortstrings to prevent cut-offs
  + ReplaceCase() ansistring overload in cutils to support the above
  * always use the fully qualified name in case of nested types inside
    the parameter lists of procdefs
  * put extra information about array parameters between {} so they
    can be passed back into the parser

git-svn-id: branches/jvmbackend@18431 -
2011-08-20 07:59:02 +00:00
Jonas Maebe
0d9948a61b + tprocsym.find_procdef_bypara_no_rettype() that looks for a procdef
based on the parameters, but ignoring the result type. Used to
    find out whether a function/procedures with these parameters
    can still be added in terms of overloading (since overloading
    ignores different result types, it only depends on the parameters)

git-svn-id: branches/jvmbackend@18430 -
2011-08-20 07:58:58 +00:00
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