[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