mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 14:19:31 +02:00
* changed TObject from an alias for JLObject into a derived class from
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 -
This commit is contained in:
parent
00df370d36
commit
03af03e696
@ -627,8 +627,9 @@ implementation
|
||||
odt_objcclass:
|
||||
CGMessage(parser_h_no_objc_parent);
|
||||
odt_javaclass:
|
||||
{ inherit from TObject by default for compatibility }
|
||||
if current_objectdef<>java_jlobject then
|
||||
childof:=java_jlobject;
|
||||
childof:=class_tobject;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1284,6 +1285,8 @@ implementation
|
||||
class_tobject:=current_objectdef;
|
||||
odt_javaclass:
|
||||
begin
|
||||
if (current_structdef.objname^='TOBJECT') then
|
||||
class_tobject:=current_objectdef;
|
||||
if (current_objectdef.objname^='JLOBJECT') then
|
||||
java_jlobject:=current_objectdef;
|
||||
if (current_objectdef.objname^='JLTHROWABLE') then
|
||||
|
@ -4680,7 +4680,7 @@ implementation
|
||||
{ the last TOBJECT which is loaded gets }
|
||||
{ it ! }
|
||||
if (childof=nil) and
|
||||
(objecttype=odt_class) and
|
||||
(objecttype in [odt_class,odt_javaclass]) and
|
||||
(objname^='TOBJECT') then
|
||||
class_tobject:=self;
|
||||
if (childof=nil) and
|
||||
|
@ -93,7 +93,14 @@ const
|
||||
{$i java_sys.inc}
|
||||
|
||||
type
|
||||
TObject = JLObject;
|
||||
TObject = class(JLObject)
|
||||
strict private
|
||||
DestructorCalled: Boolean;
|
||||
public
|
||||
procedure Free;
|
||||
destructor Destroy; virtual;
|
||||
procedure finalize; override;
|
||||
end;
|
||||
|
||||
{$i innr.inc}
|
||||
{$i jmathh.inc}
|
||||
@ -366,65 +373,65 @@ function fpc_setlength_dynarr_multidim(aorg, anew: TJObjectArray; deepcopy: bool
|
||||
FPCJDynArrTypeJByte:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jbyte(TJByteArray(aorg[i]),TJByteArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jbyte(TJByteArray(aorg[i]),TJByteArray(anew[i]),deepcopy));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jbyte(nil,TJByteArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jbyte(nil,TJByteArray(anew[i]),deepcopy));
|
||||
end;
|
||||
FPCJDynArrTypeJShort:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jshort(TJShortArray(aorg[i]),TJShortArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jshort(TJShortArray(aorg[i]),TJShortArray(anew[i]),deepcopy));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jshort(nil,TJShortArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jshort(nil,TJShortArray(anew[i]),deepcopy));
|
||||
end;
|
||||
FPCJDynArrTypeJInt:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jint(TJIntArray(aorg[i]),TJIntArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jint(TJIntArray(aorg[i]),TJIntArray(anew[i]),deepcopy));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jint(nil,TJIntArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jint(nil,TJIntArray(anew[i]),deepcopy));
|
||||
end;
|
||||
FPCJDynArrTypeJLong:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jlong(TJLongArray(aorg[i]),TJLongArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jlong(TJLongArray(aorg[i]),TJLongArray(anew[i]),deepcopy));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jlong(nil,TJLongArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jlong(nil,TJLongArray(anew[i]),deepcopy));
|
||||
end;
|
||||
FPCJDynArrTypeJChar:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jchar(TJCharArray(aorg[i]),TJCharArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jchar(TJCharArray(aorg[i]),TJCharArray(anew[i]),deepcopy));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jchar(nil,TJCharArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jchar(nil,TJCharArray(anew[i]),deepcopy));
|
||||
end;
|
||||
FPCJDynArrTypeJFloat:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jfloat(TJFloatArray(aorg[i]),TJFloatArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jfloat(TJFloatArray(aorg[i]),TJFloatArray(anew[i]),deepcopy));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jfloat(nil,TJFloatArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jfloat(nil,TJFloatArray(anew[i]),deepcopy));
|
||||
end;
|
||||
FPCJDynArrTypeJDouble:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jdouble(TJDoubleArray(aorg[i]),TJDoubleArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jdouble(TJDoubleArray(aorg[i]),TJDoubleArray(anew[i]),deepcopy));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jdouble(nil,TJDoubleArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jdouble(nil,TJDoubleArray(anew[i]),deepcopy));
|
||||
end;
|
||||
FPCJDynArrTypeJObject:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jobject(TJObjectArray(aorg[i]),TJObjectArray(anew[i]),deepcopy,true));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jobject(TJObjectArray(aorg[i]),TJObjectArray(anew[i]),deepcopy,true));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jobject(nil,TJObjectArray(anew[i]),deepcopy,true));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jobject(nil,TJObjectArray(anew[i]),deepcopy,true));
|
||||
end;
|
||||
FPCJDynArrTypeRecord:
|
||||
begin
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jrecord(TJRecordArray(aorg[i]),TJRecordArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jrecord(TJRecordArray(aorg[i]),TJRecordArray(anew[i]),deepcopy));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_jrecord(nil,TJRecordArray(anew[i]),deepcopy));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_jrecord(nil,TJRecordArray(anew[i]),deepcopy));
|
||||
end;
|
||||
end;
|
||||
end
|
||||
@ -432,9 +439,9 @@ function fpc_setlength_dynarr_multidim(aorg, anew: TJObjectArray; deepcopy: bool
|
||||
begin
|
||||
{ recursively handle the next dimension }
|
||||
for i:=low(result) to partdone do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_multidim(TJObjectArray(aorg[i]),TJObjectArray(anew[i]),deepcopy,pred(ndim),eletype));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_multidim(TJObjectArray(aorg[i]),TJObjectArray(anew[i]),deepcopy,pred(ndim),eletype));
|
||||
for i:=succ(partdone) to high(result) do
|
||||
result[i]:=TObject(fpc_setlength_dynarr_multidim(nil,TJObjectArray(anew[i]),deepcopy,pred(ndim),eletype));
|
||||
result[i]:=JLObject(fpc_setlength_dynarr_multidim(nil,TJObjectArray(anew[i]),deepcopy,pred(ndim),eletype));
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -448,6 +455,26 @@ function fpc_setlength_dynarr_multidim(aorg, anew: TJObjectArray; deepcopy: bool
|
||||
Misc. System Dependent Functions
|
||||
*****************************************************************************}
|
||||
|
||||
procedure TObject.Free;
|
||||
begin
|
||||
if not DestructorCalled then
|
||||
begin
|
||||
DestructorCalled:=true;
|
||||
Destroy;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
destructor TObject.Destroy;
|
||||
begin
|
||||
end;
|
||||
|
||||
|
||||
procedure TObject.Finalize;
|
||||
begin
|
||||
Free;
|
||||
end;
|
||||
|
||||
{*****************************************************************************
|
||||
SystemUnit Initialization
|
||||
*****************************************************************************}
|
||||
|
Loading…
Reference in New Issue
Block a user