Class PlayerDisconnectedReturnCoercionTest
java.lang.Object
scripting.PlayerDisconnectedReturnCoercionTest
回歸測試:
EventInstanceManager.playerDisconnected 的「回傳值型別強制」(R14 類別)。
背景:KerningPQ/LudiPQ/ZakumPQ 的 playerDisconnected 回傳負整數(-2/-3/-4),
EventInstanceManager 以此決定「隊長離線是否清場」。Nashorn 對整數型 JS number 回傳
Double,但 GraalJS 回傳 Integer/Long → 舊寫法
((Double) ...).byteValue() 在 GraalJS 下丟 ClassCastException,被
catch 吞成 ret=0 → 隊長離線永不清場(2026-06-02 實機驗證 KerningPQ 抓到)。
修正:改用 ((Number) r).byteValue()(比照同檔 monsterValue 的多型別處理)。
本測試把「GraalJS 整數回傳須能正確還原成負值」這個不變式釘住,防止日後又退回硬轉 (Double)。
GraalJsSeamTest 早已註明此 boxed-型別差異屬「已知類別 R14」、留待逐類別 differ 覆蓋
(見其 coercionAndStringTranscriptsMatchAcrossEngines 的尾註);本檔即補上 event 回傳路徑這一塊。
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid差異記錄(經實測修正):nashorn-core 15.7「黃金參考」對return -2回傳的也是Integer(非Double) —— 代表舊的(Double)硬轉在黃金參考下同樣會炸, 此(Double)寫法是潛伏的脆弱碼,GraalJS 只是讓它必然現形。void核心不變式:GraalJS 回傳的整數,經修正後的Number.byteValue()必須還原成原值(含 KerningPQ -2 / LudiPQ -3 / ZakumPQ -4)。void根因釘樁:GraalJS 對整數回傳「非Double」,故舊的(Double)硬轉必丟ClassCastException—— 這正是隊長離線不清場的根因。
-
Constructor Details
-
PlayerDisconnectedReturnCoercionTest
public PlayerDisconnectedReturnCoercionTest()
-
-
Method Details
-
graalIntegerReturnCoercesViaNumber
-
oldDoubleCastWouldThrowOnGraal
-
goldenNashornAlsoReturnsNonDoubleNumber
-