| 1234567891011121314151617181920212223242526272829303132333435363738 | using StringTools;function isLua5_1() {	final proc = new sys.io.Process("lua", ["-v"]);	final out = proc.stderr.readLine();	proc.close();	return out.startsWith("Lua 5.1.");}function matchesExpectedMessage(actual:String) {	// lua 5.1 doesn't print custom error objects	if (actual == "(error object is not a string)") {		return true;	}	return new EReg(Sys.args()[1], "").match(actual);}function main() {	final proc = new sys.io.Process("lua", [Sys.args()[0]]);	// ignore "lua: "	final exceptionMessage = proc.stderr.readLine().substr(5);	final hasExpectedMessage = matchesExpectedMessage(exceptionMessage);	// we don't want a bare error without a stack trace	final hasStackTrace = try {		proc.stderr.readLine().contains('stack traceback');	} catch (_:haxe.io.Eof) {		false;	};	Sys.println('Error code: ${proc.exitCode()}');	Sys.println('Has expected exception message: ${hasExpectedMessage}');	// 5.1 interpreter doesn't handle custom objects	Sys.println('Has call stack: ${hasStackTrace || isLua5_1()}');	proc.close();}
 |