diff --git a/src/jit/dump.lua b/src/jit/dump.lua index 746732f9..f296a517 100644 --- a/src/jit/dump.lua +++ b/src/jit/dump.lua @@ -552,7 +552,12 @@ local recdepth = 0 local function fmterr(err, info) if type(err) == "number" then if type(info) == "function" then info = fmtfunc(info) end - err = format(vmdef.traceerr[err], info) + local fmt = vmdef.traceerr[err] + if fmt == "NYI: bytecode %s" then + local oidx = 6 * info + info = sub(vmdef.bcnames, oidx+1, oidx+6) + end + err = format(fmt, info) end return err end diff --git a/src/jit/v.lua b/src/jit/v.lua index 8e91f494..45a663d7 100644 --- a/src/jit/v.lua +++ b/src/jit/v.lua @@ -62,7 +62,7 @@ local jit = require("jit") local jutil = require("jit.util") local vmdef = require("jit.vmdef") local funcinfo, traceinfo = jutil.funcinfo, jutil.traceinfo -local type, format = type, string.format +local type, sub, format = type, string.sub, string.format local stdout, stderr = io.stdout, io.stderr -- Active flag and output file handle. @@ -89,7 +89,12 @@ end local function fmterr(err, info) if type(err) == "number" then if type(info) == "function" then info = fmtfunc(info) end - err = format(vmdef.traceerr[err], info) + local fmt = vmdef.traceerr[err] + if fmt == "NYI: bytecode %s" then + local oidx = 6 * info + info = sub(vmdef.bcnames, oidx+1, oidx+6) + end + err = format(fmt, info) end return err end diff --git a/src/lj_traceerr.h b/src/lj_traceerr.h index 19ce30ad..08134dc5 100644 --- a/src/lj_traceerr.h +++ b/src/lj_traceerr.h @@ -13,7 +13,7 @@ TREDEF(STACKOV, "trace too deep") TREDEF(SNAPOV, "too many snapshots") TREDEF(BLACKL, "blacklisted") TREDEF(RETRY, "retry recording") -TREDEF(NYIBC, "NYI: bytecode %d") +TREDEF(NYIBC, "NYI: bytecode %s") /* Recording loop ops. */ TREDEF(LLEAVE, "leaving loop in root trace")