parsing a routine if the localst is in fact a localsymtable, otherwise
they can be generated twice for for the staticsymtable (the localst
of the init/final code of a unit is the staticsymtable)
git-svn-id: branches/jvmbackend@18476 -
assignment-nodes. For global typed constants and typed constants/
local variable initialisers in regular functions/procedurs, the
assignments are performed in the unit initialisation code. For
those in object/record definitions and their methods, it's done
in the class constructor. Since we may not yet have parsed all
method implementations when the class constructor is parsed, part
of these may be initialised in a helper routine called from the
class constructor. The ones known when the class constructor is
parsed are inited there, because the ones marked as "final" and
declared as static class fields must be initialised in the class
constructor for Java
o new set systems_typed_constants_node_init in systems unit that
indicates that a target uses node trees to initialise typed consts
instead of an initialised data section
o mark typed constants in {$j-} mode as "final" for JVM
o mangle the name of staticvarsyms inside localtables a bit to avoid
name clashes (only with procedure names for now, no parameters yet
so can still cause problems with overloaded routines)
o after a routine has been parsed, it is now processed by
cnodeutils.wrap_proc_body(), which can add extra nodes before code
generation (used for injected the typed constant node trees)
git-svn-id: branches/jvmbackend@18475 -
* also print staticvarsyms inside localsymtables of procdefs
(used for typed constants and variable initialisers)
git-svn-id: branches/jvmbackend@18473 -
it can either generate an asmlist containing data definitions (like
it does now), or a node tree with explicit initialisation statements
(for the JVM target)
git-svn-id: branches/jvmbackend@18471 -
in a single statement, to be added later)
o the unicodestrings are internally simply java.lang.String instances
o at the language level, the unicodestrings are assignment-compatible
with java.lang.String
o constant strings can be implicitly converted to java.lang.String
o since java.lang.String is immutable, in particular changing a
single character in a string is extremely inefficient. This could
be solved by letting unicodestring map to java.lang.StringBuilder,
but that would make integration with plain Java code harder
git-svn-id: branches/jvmbackend@18470 -
o when allocating array temps for the JVM target, use the specified
"forcesize" for the first dimension, since the arraydef size may
be invalid (e.g., in case it's an array constructor)
git-svn-id: branches/jvmbackend@18468 -
asis_target_specific_typecheck, and if so get the real
definition of its pointedtype rather than of the classrefdef
itself (the latter would never be different from the original
one, since there are no formal external classrefdef definitions)
git-svn-id: branches/jvmbackend@18467 -
JLObject with the method "Free" and a virtual destructor "Destroy"
(and Free is automatically called from the "finalize" method,
which in turn is called by the JVM when the instance is collected;
note that there is no final collection before the JVM shuts down,
so it may never be called if you don't call Free explicitly yourself)
* if you don't specify an explicit ancestor for a Java class, set
the parent to TObject instead of to JLObject (for better compatibility
with regular Pascal code)
git-svn-id: branches/jvmbackend@18466 -
that of the overridden method for Java classes, since the realname
is used as method identifier (and overriding is name-based and
case-sensitive in Java)
git-svn-id: branches/jvmbackend@18464 -
o initialise class vars that need initialisations (records, arrays) in
class constructors
o treat class constructors as having a "void" resultdef rather than the
class type for JVM (maybe has to be done in general?)
o make it possible to specify pno_noleadingdollar to
tprocdef.customprocname() so it can be used for class constructors
(their name is lower cased because it mustn't conflict with other
identifiers, since their name doesn't matter anyway)
o added tsk_empty synthetic procdef kind which, as the name implies,
generates an empty body (for class generated constructors)
+ auto-generate class constructors in case a class has class vars that
need initialisation
git-svn-id: branches/jvmbackend@18462 -
and initialise global variables that are wrapped (records, arrays)
in those sections
o check whether pd.localst is assigned in dbgjasm, because it's
not for the unit initialisation routine
o moved insertbssdata() from ncgutil to ngenutil and override it
njvmutil (it does nothing in the latter, since global variables
are added as fields to the class representing the unit; the
initialisation is done in gen_initialize_code() in thlcgjvm)
o added force_init() and force_final() methods to ngenutil, so
that targets can force init/final routines separate from the
regular managed types infrastructure (used by JVM for forcing
an init section in case of records/arrays)
git-svn-id: branches/jvmbackend@18460 -
makes them uncallable from actual Java code (javac hides them), which
is not the idea (otherwise you can't e.g. create record types in Java)
git-svn-id: branches/jvmbackend@18459 -
fpcbaserecordtype for the JVM target (intercept in ncnv via new
target_specific_general_typeconv helper, handle in as/is code)
* not only check for related types in htypechk in case they are
objdefs, but always do so (records are related to jlobject/fpcbaserecord
on the JVM target)
git-svn-id: branches/jvmbackend@18458 -
use of the register (can happen if the register is unused afterwards;
remove the alloc/dealloc results in no temp being allocated for the
register, so that instruction becomes invalid)
git-svn-id: branches/jvmbackend@18455 -
happens automatically when required (for constructing arrays/records;
reference counted types don't need special treatment since everything
is garbage collected)
git-svn-id: branches/jvmbackend@18453 -
hlcgobj so it can be overridden with target-specific code (e.g.,
the JVM target has to add initialisation code to allocate regular
arrays and records in constructors and unit/program initialisation)
git-svn-id: branches/jvmbackend@18452 -
implemented via classes, all descending from system.FpcBaseRecordType
(records are also considered to be "related" to system.FpcBaseRecordType
on the JVM target)
* several routines are auto-generated for all record-classes: apart
from a default constructor (if there is none), also clone (which
returns a new instance containing a deep copy of the current
instance) and deepCopy (which copies all fields of one instance
into another one)
o added new field "synthetickind" to tprocdef that indicates what
kind of synthetically generated method it is (if any), and
mark such methods also as "synthetic" in the JVM assembler code
o split off the JVM-specific parser code (e.g., to add default
constructors) into pjvm.pas
git-svn-id: branches/jvmbackend@18450 -
from tobjectdef to tabstractrecorddef, since records are implemented
via Java classes on the JVM target (and hence have an associated
package name, and we have to be able to generate their JVM-style
mangled name)
* adapted ppudump to this change
git-svn-id: branches/jvmbackend@18449 -
(and override for the JVM, making the register type for records
R_ADDRESSREGISTER instead of R_INTREGISTER there)
git-svn-id: branches/jvmbackend@18448 -
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 -
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 -
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 -
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 -
(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 -
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 -
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 -
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 -