From 03080b795aa3496ed62d4a0697c9f4767e7ca7e5 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 15 Aug 2022 14:16:58 +0200 Subject: [PATCH] Add -F option to override filename in jit.bcsave (luajit -b). Suggested by Mathias Westerdahl. --- doc/running.html | 1 + src/jit/bcsave.lua | 29 ++++++++++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/doc/running.html b/doc/running.html index 177e6357..91a719f9 100644 --- a/doc/running.html +++ b/doc/running.html @@ -111,6 +111,7 @@ are accepted:
  • -t type — Set output file type (default: auto-detect from output name).
  • -a arch — Override architecture for object files (default: native).
  • -o os — Override OS for object files (default: native).
  • +
  • -F name — Override filename (default: input filename).
  • -e chunk — Use chunk string as input.
  • - (a single minus sign) — Use stdin as input and/or stdout as output.
  • diff --git a/src/jit/bcsave.lua b/src/jit/bcsave.lua index f8ed3a1b..90fe9daf 100644 --- a/src/jit/bcsave.lua +++ b/src/jit/bcsave.lua @@ -33,6 +33,7 @@ Save LuaJIT bytecode: luajit -b[options] input output -t type Set output file type (default: auto-detect from output name). -a arch Override architecture for object files (default: native). -o os Override OS for object files (default: native). + -F name Override filename (default: input filename). -e chunk Use chunk string as input. -- Stop handling options. - Use stdin as input and/or stdout as output. @@ -49,10 +50,22 @@ local function check(ok, ...) os.exit(1) end -local function readfile(input) +local function readfile(ctx, input) if type(input) == "function" then return input end - if input == "-" then input = nil end - return check(loadfile(input)) + if ctx.filename then + local data + if input == "-" then + data = io.stdin:read("*a") + else + local fp = assert(io.open(input, "rb")) + data = assert(fp:read("*a")) + assert(fp:close()) + end + return check(load(data, ctx.filename)) + else + if input == "-" then input = nil end + return check(loadfile(input)) + end end local function savefile(name, mode) @@ -604,13 +617,13 @@ end ------------------------------------------------------------------------------ -local function bclist(input, output) - local f = readfile(input) +local function bclist(ctx, input, output) + local f = readfile(ctx, input) require("jit.bc").dump(f, savefile(output, "w"), true) end local function bcsave(ctx, input, output) - local f = readfile(input) + local f = readfile(ctx, input) local s = string.dump(f, ctx.strip) local t = ctx.type if not t then @@ -663,6 +676,8 @@ local function docmd(...) ctx.arch = checkarg(tremove(arg, n), map_arch, "architecture") elseif opt == "o" then ctx.os = checkarg(tremove(arg, n), map_os, "OS name") + elseif opt == "F" then + ctx.filename = "@"..tremove(arg, n) else usage() end @@ -674,7 +689,7 @@ local function docmd(...) end if list then if #arg == 0 or #arg > 2 then usage() end - bclist(arg[1], arg[2] or "-") + bclist(ctx, arg[1], arg[2] or "-") else if #arg ~= 2 then usage() end bcsave(ctx, arg[1], arg[2])