From e57394679028ac98e288e6d83169a0ed912cf2ea Mon Sep 17 00:00:00 2001 From: mattcce Date: Tue, 21 Oct 2025 09:42:21 +0800 Subject: [PATCH] adapt Java CSE machine --- src/commons/utils/JavaHelper.ts | 20 +++++++++++++------ .../cseMachine/java/components/Method.tsx | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/commons/utils/JavaHelper.ts b/src/commons/utils/JavaHelper.ts index fbb7199135..4567bbeac8 100644 --- a/src/commons/utils/JavaHelper.ts +++ b/src/commons/utils/JavaHelper.ts @@ -1,5 +1,6 @@ import { compileFromSource, ECE, typeCheck } from 'java-slang'; import { BinaryWriter } from 'java-slang/dist/compiler/binary-writer'; +import { IOCallbacks } from 'java-slang/dist/ec-evaluator'; import setupJVM, { parseBin } from 'java-slang/dist/jvm'; import { createModuleProxy, loadCachedFiles } from 'java-slang/dist/jvm/utils/integration'; import { Context, Result } from 'js-slang'; @@ -98,6 +99,12 @@ export async function javaRun( return Promise.resolve({ status: 'error' }); } } else { + if (isUsingCse) { + const result = await runJavaCseMachine(javaCode, targetStep, context, { stdout, stderr }); + + return result; + } + const typeCheckResult = typeCheck(javaCode); if (typeCheckResult.hasTypeErrors) { const typeErrMsg = typeCheckResult.errorMsgs.join('\n'); @@ -105,10 +112,6 @@ export async function javaRun( return Promise.resolve({ status: 'error' }); } - if (isUsingCse) { - return await runJavaCseMachine(javaCode, targetStep, context); - } - try { const classFile = compileFromSource(javaCode); compiled = { @@ -178,7 +181,12 @@ export function visualizeJavaCseMachine({ context }: { context: ECE.Context }) { } } -export async function runJavaCseMachine(code: string, targetStep: number, context: Context) { +export async function runJavaCseMachine( + code: string, + targetStep: number, + context: Context, + ioCallbacks: IOCallbacks +) { const convertJavaErrorToJsError = (e: ECE.SourceError): SourceError => ({ type: ErrorType.RUNTIME, severity: ErrorSeverity.ERROR, @@ -197,7 +205,7 @@ export async function runJavaCseMachine(code: string, targetStep: number, contex elaborate: () => e.explain() }); context.executionMethod = 'cse-machine'; - return ECE.runECEvaluator(code, targetStep) + return ECE.runECEvaluator(code, targetStep, ioCallbacks) .then(result => { context.runtime.envStepsTotal = result.context.totalSteps; if (result.status === 'error') { diff --git a/src/features/cseMachine/java/components/Method.tsx b/src/features/cseMachine/java/components/Method.tsx index cfd3d60d53..29c550496c 100644 --- a/src/features/cseMachine/java/components/Method.tsx +++ b/src/features/cseMachine/java/components/Method.tsx @@ -39,7 +39,7 @@ export class Method extends Visible implements IHoverable { // Tooltip. this._tooltipRef = React.createRef(); - this._tooltip = astToString(this._method.mtdOrCon); + this._tooltip = astToString(this._method.decl); } get method() {