sclass LASCompileResult { settable S script; settable GazelleV_LeftArrowScriptParser parser; settable Throwable compileError; /*settable broken*/ GazelleV_LeftArrowScript.Script parsedScript; RunResultWithTimestamps compileLog; toString { ret compileError != null ? errorToString() : "Compiled OK"; } S errorToString() { ret exceptionToStringShorter_dontDropOuterExceptions(compileError); } bool runnable() { ret parsedScript != null; } void compile() { compileLog = runResultWithTimestamps(-> parsedScript = parser.parse(script)); if (compileLog.isError()) { var e = compileLog.getError(); print(e); compileError(e); } } GazelleV_LeftArrowScript.Script parsedScript() { ret parsedScript; } GazelleV_LeftArrowScript.Script parsedScriptMandatory() { if (compileError != null) fail(compileError); ret parsedScript; } }