From 6fc406e6df80588ddc32c007e7bf02add584ba7c Mon Sep 17 00:00:00 2001 From: pipythonmc <47196755+pythonmcpi@users.noreply.github.com> Date: Tue, 28 Apr 2026 20:51:22 -0700 Subject: [PATCH] fix: op consumption check should happen in CastingVM instead of PatternIota --- .../at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt | 7 +++++++ .../at/petrak/hexcasting/api/casting/iota/PatternIota.java | 4 ---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt index 11503b0b6f..3d03a9a843 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt @@ -59,6 +59,13 @@ class CastingVM(var image: CastingImage, val env: CastingEnvironment) { resolutionType = ResolvedPatternType.ERRORED, sound = HexEvalSounds.MISHAP, ) + } else if (result.newData != null && result.newData.opsConsumed > env.maxOpCount()) { + result.copy( + newData = null, + sideEffects = listOf(OperatorSideEffect.DoMishap(MishapEvalTooMuch(), Mishap.Context(null, null))), + resolutionType = ResolvedPatternType.ERRORED, + sound = HexEvalSounds.MISHAP, + ) } else { result } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/PatternIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/PatternIota.java index 74db0a95fb..536710b92b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/PatternIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/PatternIota.java @@ -108,10 +108,6 @@ public boolean toleratesOther(Iota that) { continuation ); - if (result.getNewImage().getOpsConsumed() > vm.getEnv().maxOpCount()) { - throw new MishapEvalTooMuch(); - } - var cont2 = result.getNewContinuation(); // TODO parens also break prescience var sideEffects = result.getSideEffects();