mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-10-27 11:57:38 +00:00
Update Cobalt to 0.7
- Timeouts are now driven by an interrupt system, rather than polling. While we do not impose memory limits, this should close #1333. - Update the table library to largely match Lua 5.4: - Add table.move - Table methods (with the exception of foreach/foreachi) now use metamethods (closes #1088). There's still some remaining quirks (for instance, table.insert accepts values out-of-bounds), but I think that's fine. - Cobalt's threaded-coroutine system is gone (load now supports yielding), so we no longer track coroutine metrics. - Type errors now use __name. See #1355, though this does not apply to CC methods (either on the Java or CraftOS side), so is not enough to resolve it. See https://github.com/SquidDev/Cobalt/compare/v0.6.0...v0.7.0 for the full delta.
This commit is contained in:
@@ -27,11 +27,12 @@ import org.opentest4j.AssertionFailedError;
|
||||
import org.opentest4j.TestAbortedException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.squiddev.cobalt.*;
|
||||
import org.squiddev.cobalt.LuaState;
|
||||
import org.squiddev.cobalt.LuaString;
|
||||
import org.squiddev.cobalt.LuaThread;
|
||||
import org.squiddev.cobalt.debug.DebugFrame;
|
||||
import org.squiddev.cobalt.debug.DebugHook;
|
||||
import org.squiddev.cobalt.debug.DebugState;
|
||||
import org.squiddev.cobalt.function.OneArgFunction;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.File;
|
||||
@@ -480,13 +481,8 @@ public class ComputerTestDelegate {
|
||||
CoverageLuaMachine(MachineEnvironment environment, InputStream bios) throws MachineException, IOException {
|
||||
super(environment, bios);
|
||||
|
||||
LuaTable globals;
|
||||
LuaThread mainRoutine;
|
||||
try {
|
||||
var globalField = CobaltLuaMachine.class.getDeclaredField("globals");
|
||||
globalField.setAccessible(true);
|
||||
globals = (LuaTable) globalField.get(this);
|
||||
|
||||
var threadField = CobaltLuaMachine.class.getDeclaredField("mainRoutine");
|
||||
threadField.setAccessible(true);
|
||||
mainRoutine = (LuaThread) threadField.get(this);
|
||||
@@ -513,21 +509,13 @@ public class ComputerTestDelegate {
|
||||
if (frame.closure == null) return;
|
||||
|
||||
var proto = frame.closure.getPrototype();
|
||||
if (!proto.source.startsWith('@')) return;
|
||||
if (!proto.source.startsWith((byte) '@')) return;
|
||||
|
||||
var map = coverage.computeIfAbsent(proto.source, x -> new Int2IntArrayMap());
|
||||
map.put(newLine, map.get(newLine) + 1);
|
||||
}
|
||||
};
|
||||
|
||||
((LuaTable) globals.rawget("coroutine")).rawset("create", new OneArgFunction() {
|
||||
@Override
|
||||
public LuaValue call(LuaState state, LuaValue arg) throws LuaError {
|
||||
var thread = new LuaThread(state, arg.checkFunction(), state.getCurrentThread().getfenv());
|
||||
thread.getDebugState().setHook(hook, false, true, false, 0);
|
||||
return thread;
|
||||
}
|
||||
});
|
||||
mainRoutine.getDebugState().setHook(hook, false, true, false, 0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user