timefold-solver icon indicating copy to clipboard operation
timefold-solver copied to clipboard

jpyinterpreter - make FOR_ITER use Java iterator loop format when possible

Open Christopher-Chianelli opened this issue 1 year ago • 0 comments

Currently, in order to fully support all the forms a Python iterator can take, jpyinterpreter generates the following code for FOR_ITER:

try {
    do {
        TOS' = next(TOS)
         // code in for block
    } while(true);
} catch (StopIteration e) {
    // code after for block
}

This is highly atypical in Java, and the JVM probably would have a harder time optimizing its standard for iterator loop:

while (TOS.hasNext()) {
    TOS' = TOS.next();
    // code in for block
}
 // code after for block

We can look at TOS to see if it a known iterator type (i.e. PythonIterator), and if so, generate the more typical Java loop.

Christopher-Chianelli avatar Mar 04 '24 18:03 Christopher-Chianelli