Skip to content

Commit d9a2724

Browse files
committed
Fix test_custom_iterator_return
1 parent ec73b48 commit d9a2724

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags_bytecode_dsl/test_yield_from.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ test.test_yield_from.TestPEP380Operation.test_broken_getattr_handling @ linux-x8
1111
test.test_yield_from.TestPEP380Operation.test_catching_exception_from_subgen_and_returning @ linux-x86_64
1212
test.test_yield_from.TestPEP380Operation.test_close_with_cleared_frame @ linux-x86_64
1313
test.test_yield_from.TestPEP380Operation.test_conversion_of_sendNone_to_next @ linux-x86_64
14+
test.test_yield_from.TestPEP380Operation.test_custom_iterator_return @ linux-x86_64
1415
test.test_yield_from.TestPEP380Operation.test_delegating_close @ linux-x86_64
1516
test.test_yield_from.TestPEP380Operation.test_delegating_generators_claim_to_be_running @ linux-x86_64
1617
test.test_yield_from.TestPEP380Operation.test_delegating_throw @ linux-x86_64

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/compiler/bytecode_dsl/RootNodeCompiler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2638,7 +2638,7 @@ public void emitYieldFrom(Runnable generatorOrCoroutineProducer) {
26382638
*
26392639
* end:
26402640
* # Step 4: return returnValue
2641-
* returnValue (result)
2641+
* load returnValue (result)
26422642
* @formatter:on
26432643
*/
26442644
b.beginBlock();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/bytecode_dsl/PBytecodeDSLRootNode.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
109109
import com.oracle.graal.python.builtins.objects.type.TpSlots;
110110
import com.oracle.graal.python.builtins.objects.type.TpSlots.GetObjectSlotsNode;
111+
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotIterNext.CallSlotTpIterNextNode;
111112
import com.oracle.graal.python.builtins.objects.typing.PTypeAliasType;
112113
import com.oracle.graal.python.compiler.CodeUnit;
113114
import com.oracle.graal.python.compiler.OpCodes.MakeTypeParamKind;
@@ -3377,25 +3378,35 @@ static boolean doGenerator(VirtualFrame virtualFrame,
33773378
}
33783379
}
33793380

3380-
@Specialization(guards = "iterCheck.execute(inliningTarget, iter)", limit = "1")
3381+
static boolean hasIterSlot(TpSlots slots) {
3382+
return PyIterCheckNode.checkSlots(slots);
3383+
}
3384+
3385+
@Specialization(guards = "hasIterSlot(slots)", limit = "1")
33813386
static boolean doIterator(VirtualFrame virtualFrame,
33823387
LocalAccessor yieldedValue,
33833388
LocalAccessor returnedValue,
33843389
Object iter,
33853390
@SuppressWarnings("unused") PNone arg,
33863391
@Bind Node inliningTarget,
33873392
@Bind BytecodeNode bytecode,
3388-
@SuppressWarnings("unused") @Cached PyIterCheckNode iterCheck,
3389-
@Cached PyIterNextNode getNextNode,
3393+
@SuppressWarnings("unused") @Cached GetObjectSlotsNode getSlots,
3394+
@Bind("getSlots.execute(inliningTarget, iter)") TpSlots slots,
3395+
@Cached CallSlotTpIterNextNode callIterNext,
3396+
@Exclusive @Cached InlinedBranchProfile exhaustedNoException,
33903397
@Shared @Cached IsBuiltinObjectProfile stopIterationProfile,
33913398
@Shared @Cached StopIterationBuiltins.StopIterationValueNode getValue) {
33923399
try {
3393-
Object value = getNextNode.execute(virtualFrame, inliningTarget, iter);
3400+
Object value = callIterNext.execute(virtualFrame, inliningTarget, slots.tp_iternext(), iter);
33943401
yieldedValue.setObject(bytecode, virtualFrame, value);
33953402
return false;
33963403
} catch (IteratorExhausted e) {
3404+
exhaustedNoException.enter(inliningTarget);
33973405
returnedValue.setObject(bytecode, virtualFrame, PNone.NONE);
33983406
return true;
3407+
} catch (PException e) {
3408+
handleException(virtualFrame, e, inliningTarget, bytecode, stopIterationProfile, getValue, returnedValue);
3409+
return true;
33993410
}
34003411
}
34013412

0 commit comments

Comments
 (0)