[fpc-devel] Android SDK's DX reports that a local is invalid
Sven Barth
pascaldragon at googlemail.com
Sat Jun 30 16:34:36 CEST 2012
Hello together and especially hello Jonas,
I'm currently playing around with Android again. Mostly to implement a
backup/restore procedure for my TrainLog application as I want to update
my device (official ICS update, yippieh!) and don't plan to lose all my
collected train counts...
Nevertheless I added a routine to my application, but when I try to "dx"
the generated class file I get an error about an invalid locale.
Here is the offending method (extracted, but error is reproduceable)
[it's based on Java code mentioned here:
http://stackoverflow.com/a/6542214 ]:
=== unit begin ===
unit Test;
{$mode objfpc}{$H+}
{$modeswitch unicodestrings}
interface
uses
AndroidR14;
type
TTest = class
private
procedure CopyFile(aSrc, aDest: JIFile);
end;
implementation
procedure TTest.CopyFile(aSrc, aDest: JIFile);
var
outstr: JIFileOutputStream;
instr: JIFileInputStream;
outchannel, inchannel: JNCFileChannel;
begin
outstr := JIFileOutputStream.Create(aDest);
instr := JIFileInputStream.Create(aSrc);
try
inchannel := instr.getChannel;
outchannel := outstr.getChannel;
inchannel.transferTo(0, inchannel.size, outchannel as
JNCWritableByteChannel);
finally
try
if Assigned(inchannel) then
inchannel.close;
finally
if Assigned(outchannel) then
outchannel.close;
end;
end;
end;
end.
=== unit end ===
The output of "dx" when called with "--dex --output=classes.dex lib/"
(where lib is the directory I set for FPC's "-FE" option) is the following:
=== output begin ===
EXCEPTION FROM SIMULATION:
local 0006: invalid
...at bytecode offset 00000092
locals[0000]: LTTest;
locals[0001]: Ljava/io/File;
locals[0002]: Ljava/io/File;
locals[0003]: Ljava/io/FileOutputStream;
locals[0004]: Ljava/io/FileInputStream;
locals[0005]: <invalid>
locals[0006]: <invalid>
locals[0007]: Ljava/lang/Object;
locals[0008]: <invalid>
locals[0009]: <invalid>
locals[000a]: <invalid>
locals[000b]: <invalid>
locals[000c]: type{java.lang.Object}
locals[000d]: <invalid>
locals[000e]: <invalid>
locals[000f]: <invalid>
...while working on block 0092
...while working on method CopyFile:(Ljava/io/File;Ljava/io/File;)V
...while processing CopyFile (Ljava/io/File;Ljava/io/File;)V
...while processing TTest.class
1 error; aborting
=== output end ===
I'm using revision 21737 (pretty up to date ^^)
Regards,
Sven
More information about the fpc-devel
mailing list