From a262c09219368e6891d7fb1dfdcfa48909e987fb Mon Sep 17 00:00:00 2001 From: Alex Zenla Date: Sat, 26 Jul 2025 15:29:00 -0700 Subject: [PATCH] improve debug mode --- .../pork/execution/InternalNativeProvider.kt | 19 ++++++++++++++++--- .../kotlin/gay/pizza/pork/minimal/main.kt | 3 +-- .../kotlin/gay/pizza/pork/tool/RunCommand.kt | 2 +- .../gay/pizza/pork/vm/InternalMachine.kt | 3 ++- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/execution/src/main/kotlin/gay/pizza/pork/execution/InternalNativeProvider.kt b/execution/src/main/kotlin/gay/pizza/pork/execution/InternalNativeProvider.kt index a2e5b77..5a59601 100644 --- a/execution/src/main/kotlin/gay/pizza/pork/execution/InternalNativeProvider.kt +++ b/execution/src/main/kotlin/gay/pizza/pork/execution/InternalNativeProvider.kt @@ -1,6 +1,6 @@ package gay.pizza.pork.execution -class InternalNativeProvider(val quiet: Boolean = false) : NativeProvider { +class InternalNativeProvider(val quiet: Boolean = false, val debug: Boolean = false) : NativeProvider { private val functions = mutableMapOf( "print" to NativeFunction(::printValues), "println" to NativeFunction(::printLine), @@ -39,13 +39,26 @@ class InternalNativeProvider(val quiet: Boolean = false) : NativeProvider { private fun printValues(arguments: ArgumentList): Any { if (quiet || arguments.isEmpty()) return None - print(arguments.at>(0).joinToString(" ") { it.toString() }) + val string = arguments.at>(0).joinToString(" ") { it.toString() } + if (debug) { + print(" internal: native print: ${string.replace("\n", "\\n")}") + return None + } + print(string) return None } private fun printLine(arguments: ArgumentList): Any { if (quiet) return None - println(arguments.at>(0).joinToString(" ") { it.toString() }) + val string = arguments.at>(0).joinToString(" ") { it.toString() } + if (debug) { + val lines = string.split("\n") + for (line in lines) { + println(" internal: native println: $line") + } + return None + } + println(string) return Unit } diff --git a/minimal/src/main/kotlin/gay/pizza/pork/minimal/main.kt b/minimal/src/main/kotlin/gay/pizza/pork/minimal/main.kt index 01b44a6..4b0e95e 100644 --- a/minimal/src/main/kotlin/gay/pizza/pork/minimal/main.kt +++ b/minimal/src/main/kotlin/gay/pizza/pork/minimal/main.kt @@ -2,7 +2,6 @@ package gay.pizza.pork.minimal import gay.pizza.dough.fs.PlatformFsProvider import gay.pizza.pork.ast.gen.Symbol -import gay.pizza.pork.evaluator.Scope import gay.pizza.pork.execution.ExecutionOptions import gay.pizza.pork.execution.InternalNativeProvider import gay.pizza.pork.execution.NativeRegistry @@ -16,7 +15,7 @@ fun main(args: Array) { val path = PlatformFsProvider.resolve(args[0]) val tool = FileTool(path) val nativeRegistry = NativeRegistry() - nativeRegistry.add("internal", InternalNativeProvider(quiet = false)) + nativeRegistry.add("internal", InternalNativeProvider(quiet = false, debug = false)) val main = tool.createExecutionContext( ExecutionType.Evaluator, Symbol("main"), diff --git a/tool/src/main/kotlin/gay/pizza/pork/tool/RunCommand.kt b/tool/src/main/kotlin/gay/pizza/pork/tool/RunCommand.kt index 4bb61d2..45ccc50 100644 --- a/tool/src/main/kotlin/gay/pizza/pork/tool/RunCommand.kt +++ b/tool/src/main/kotlin/gay/pizza/pork/tool/RunCommand.kt @@ -32,7 +32,7 @@ class RunCommand : CliktCommand("run") { override fun run() { val tool = FileTool(PlatformFsProvider.resolve(path)) val nativeRegistry = NativeRegistry() - nativeRegistry.add("internal", InternalNativeProvider(quiet = quiet)) + nativeRegistry.add("internal", InternalNativeProvider(quiet = quiet, debug = debug)) nativeRegistry.add("java", JavaNativeProvider()) nativeRegistry.add("ffi", FfiNativeProvider()) val main = tool.createExecutionContext(executionType, Symbol("main"), ExecutionOptions( diff --git a/vm/src/main/kotlin/gay/pizza/pork/vm/InternalMachine.kt b/vm/src/main/kotlin/gay/pizza/pork/vm/InternalMachine.kt index 9beade8..50f6ecc 100644 --- a/vm/src/main/kotlin/gay/pizza/pork/vm/InternalMachine.kt +++ b/vm/src/main/kotlin/gay/pizza/pork/vm/InternalMachine.kt @@ -25,7 +25,8 @@ class InternalMachine(val world: CompiledWorld, val nativeRegistry: NativeRegist val (op, handler) = inlined[inst.toInt()] if (debug) { val frame = frame(inst) - println("vm: step: in ${frame?.symbolInfo?.commonSymbolIdentity ?: "unknown"}: $inst ${op.code}${if (op.args.isEmpty()) "" else " " + op.args.joinToString(" ")}") + println("vm: step: in slab ${frame?.symbolInfo?.slab ?: "unknown"}: symbol ${frame?.symbolInfo?.symbol ?: "unknown"}: $inst ${op.code}${if (op.args.isEmpty()) "" else " " + op.args.joinToString(" ")}") + println("vm: step: stack: ${stack}") } handler.handle(this, op)