Skip to content

Commit ca35dee

Browse files
committed
Implement printing debug messages for OpPrint and DoMishap
1 parent 054eef8 commit ca35dee

File tree

4 files changed

+71
-1
lines changed

4 files changed

+71
-1
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package gay.object.hexdebug.mixin;
2+
3+
import at.petrak.hexcasting.api.spell.casting.CastingHarness;
4+
import at.petrak.hexcasting.api.spell.casting.sideeffects.OperatorSideEffect;
5+
import at.petrak.hexcasting.api.spell.mishaps.Mishap;
6+
import gay.object.hexdebug.casting.eval.IMixinCastingContext;
7+
import gay.object.hexdebug.casting.eval.IMixinCastingContextKt;
8+
import org.eclipse.lsp4j.debug.OutputEventArgumentsCategory;
9+
import org.spongepowered.asm.mixin.Final;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.Inject;
14+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
15+
16+
@Mixin(OperatorSideEffect.DoMishap.class)
17+
public abstract class MixinDoMishap {
18+
@Final
19+
@Shadow(remap = false)
20+
private Mishap mishap;
21+
@Final
22+
@Shadow(remap = false)
23+
private Mishap.Context errorCtx;
24+
25+
@SuppressWarnings("UnreachableCode")
26+
@Inject(method = "performEffect", at = @At("HEAD"), remap = false)
27+
private void printDebugMessage$hexdebug(CastingHarness harness, CallbackInfoReturnable<Boolean> cir) {
28+
var ctx = harness.getCtx();
29+
var msg = mishap.errorMessage(ctx, errorCtx);
30+
var debugCastEnv = (IMixinCastingContext) (Object) ctx;
31+
if (debugCastEnv != null && debugCastEnv.isDebugging$hexdebug()) {
32+
IMixinCastingContextKt.printDebugMessage(ctx.getCaster(), msg, OutputEventArgumentsCategory.STDERR, true);
33+
}
34+
}
35+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package gay.object.hexdebug.mixin;
2+
3+
import at.petrak.hexcasting.api.spell.casting.CastingContext;
4+
import at.petrak.hexcasting.api.spell.iota.Iota;
5+
import gay.object.hexdebug.casting.eval.IMixinCastingContext;
6+
import gay.object.hexdebug.casting.eval.IMixinCastingContextKt;
7+
import org.eclipse.lsp4j.debug.OutputEventArgumentsCategory;
8+
import org.spongepowered.asm.mixin.Final;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.Shadow;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
14+
15+
@Mixin(targets = "at.petrak.hexcasting.common.casting.operators.spells.OpPrint$Spell")
16+
public class MixinOpPrintSpell {
17+
@Final
18+
@Shadow(remap = false)
19+
private Iota datum;
20+
21+
@SuppressWarnings("UnreachableCode")
22+
@Inject(method = "cast", at = @At("HEAD"), remap = false)
23+
private void printDebugMessage$hexdebug(CastingContext ctx, CallbackInfo ci) {
24+
var msg = datum.display();
25+
var debugCastEnv = (IMixinCastingContext) (Object) ctx;
26+
if (debugCastEnv != null && debugCastEnv.isDebugging$hexdebug()) {
27+
IMixinCastingContextKt.printDebugMessage(ctx.getCaster(), msg, OutputEventArgumentsCategory.STDOUT, true);
28+
}
29+
}
30+
}

Common/src/main/kotlin/gay/object/hexdebug/debugger/HexDebugger.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ class HexDebugger(
4949

5050
@Suppress("CAST_NEVER_SUCCEEDS")
5151
val debugCastEnv = vm.ctx as IMixinCastingContext
52+
init {
53+
debugCastEnv.`isDebugging$hexdebug` = true
54+
}
5255

5356
var lastEvaluatedMetadata: IotaMetadata? = null
5457
private set

Common/src/main/resources/hexdebug-common.mixins.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
],
99
"mixins": [
1010
"MixinCastingContext",
11+
"MixinDoMishap",
1112
"MixinFrameEvaluate",
1213
"MixinMsgShiftScrollSyn",
13-
"MixinOpEval"
14+
"MixinOpEval",
15+
"MixinOpPrintSpell"
1416
],
1517
"injectors": {
1618
"defaultRequire": 1

0 commit comments

Comments
 (0)