Skip to content

Problem with USE_INTERPRETER #329

@dennis508

Description

@dennis508

USE_INTERPRETER returns incorrect results when running ExifTool. There are many fails in the ExifTool test suite. Here is one test case:

cd /path/to/exiftool-test-images
#perl
time exiftool -a -make -model -imagesize Canon.jpg Nikon.jpg Sony.jpg
======== Canon.jpg
Make                            : Canon
Camera Model Name               : Canon EOS DIGITAL REBEL
Image Size                      : 8x8
======== Nikon.jpg
Make                            : NIKON
Camera Model Name               : E775
Image Size                      : 8x8
======== Sony.jpg
Make                            : SONY
Make                            : SONY
Camera Model Name               : DSC-F828
Camera Model Name               : DSC-F828
Image Size                      : 8x8
    3 image files read
real    0m0.226s


#jperl
time /path/to/jperl /path/to/exiftool -a -make -model -imagesize Canon.jpg Nikon.jpg Sony.jpg
...same correct results as above...
    3 image files read
real    0m6.595s


#jperl force interpreter
export JPERL_INTERPRETER=1
time /path/to/jperl /path/to/exiftool -a -make -model -imagesize Canon.jpg Nikon.jpg Sony.jpg
======== Canon.jpg
======== Nikon.jpg
======== Sony.jpg
Make                            : SONY
Camera Model Name               : DSC-F828
    3 image files read
real    0m4.340s

Also, please note that the CompileOptions switch useInterpreter does not seem to "stick." I see breakpoints at PerlLanguageProvider.needsInterpreterFallback where the interpreter switch value is false.

CompilerOptions options = new CompilerOptions();
options.fileName = "<init>";
options.code = initScript;
options.useInterpreter = true;

PerlLanguageProvider.executePerlCode(options, true);
...
RuntimeScalar processImage = GlobalVariable.getGlobalCodeRef("main::process_image");
...
RuntimeList rlist = RuntimeCode.apply(processImage, args, RuntimeContextType.SCALAR);

Running this way I get correct results until I set
public static final boolean FORCE_INTERPRETER = true;
in RuntimeCode.java.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions