aboutsummaryrefslogtreecommitdiff
path: root/src/jit
diff options
context:
space:
mode:
authorMike Pall <mike>2022-08-15 14:16:58 +0200
committerMike Pall <mike>2022-08-15 14:16:58 +0200
commit03080b795aa3496ed62d4a0697c9f4767e7ca7e5 (patch)
treec69815093757d849842233dc70376e84c8839a1b /src/jit
parent975ec13f5d5aefcac1dbb15fa867e660e07c93a1 (diff)
downloadluajit-03080b795aa3496ed62d4a0697c9f4767e7ca7e5.tar.gz
luajit-03080b795aa3496ed62d4a0697c9f4767e7ca7e5.tar.bz2
luajit-03080b795aa3496ed62d4a0697c9f4767e7ca7e5.zip
Add -F option to override filename in jit.bcsave (luajit -b).
Suggested by Mathias Westerdahl.
Diffstat (limited to 'src/jit')
-rw-r--r--src/jit/bcsave.lua29
1 files changed, 22 insertions, 7 deletions
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
33 -t type Set output file type (default: auto-detect from output name). 33 -t type Set output file type (default: auto-detect from output name).
34 -a arch Override architecture for object files (default: native). 34 -a arch Override architecture for object files (default: native).
35 -o os Override OS for object files (default: native). 35 -o os Override OS for object files (default: native).
36 -F name Override filename (default: input filename).
36 -e chunk Use chunk string as input. 37 -e chunk Use chunk string as input.
37 -- Stop handling options. 38 -- Stop handling options.
38 - Use stdin as input and/or stdout as output. 39 - Use stdin as input and/or stdout as output.
@@ -49,10 +50,22 @@ local function check(ok, ...)
49 os.exit(1) 50 os.exit(1)
50end 51end
51 52
52local function readfile(input) 53local function readfile(ctx, input)
53 if type(input) == "function" then return input end 54 if type(input) == "function" then return input end
54 if input == "-" then input = nil end 55 if ctx.filename then
55 return check(loadfile(input)) 56 local data
57 if input == "-" then
58 data = io.stdin:read("*a")
59 else
60 local fp = assert(io.open(input, "rb"))
61 data = assert(fp:read("*a"))
62 assert(fp:close())
63 end
64 return check(load(data, ctx.filename))
65 else
66 if input == "-" then input = nil end
67 return check(loadfile(input))
68 end
56end 69end
57 70
58local function savefile(name, mode) 71local function savefile(name, mode)
@@ -604,13 +617,13 @@ end
604 617
605------------------------------------------------------------------------------ 618------------------------------------------------------------------------------
606 619
607local function bclist(input, output) 620local function bclist(ctx, input, output)
608 local f = readfile(input) 621 local f = readfile(ctx, input)
609 require("jit.bc").dump(f, savefile(output, "w"), true) 622 require("jit.bc").dump(f, savefile(output, "w"), true)
610end 623end
611 624
612local function bcsave(ctx, input, output) 625local function bcsave(ctx, input, output)
613 local f = readfile(input) 626 local f = readfile(ctx, input)
614 local s = string.dump(f, ctx.strip) 627 local s = string.dump(f, ctx.strip)
615 local t = ctx.type 628 local t = ctx.type
616 if not t then 629 if not t then
@@ -663,6 +676,8 @@ local function docmd(...)
663 ctx.arch = checkarg(tremove(arg, n), map_arch, "architecture") 676 ctx.arch = checkarg(tremove(arg, n), map_arch, "architecture")
664 elseif opt == "o" then 677 elseif opt == "o" then
665 ctx.os = checkarg(tremove(arg, n), map_os, "OS name") 678 ctx.os = checkarg(tremove(arg, n), map_os, "OS name")
679 elseif opt == "F" then
680 ctx.filename = "@"..tremove(arg, n)
666 else 681 else
667 usage() 682 usage()
668 end 683 end
@@ -674,7 +689,7 @@ local function docmd(...)
674 end 689 end
675 if list then 690 if list then
676 if #arg == 0 or #arg > 2 then usage() end 691 if #arg == 0 or #arg > 2 then usage() end
677 bclist(arg[1], arg[2] or "-") 692 bclist(ctx, arg[1], arg[2] or "-")
678 else 693 else
679 if #arg ~= 2 then usage() end 694 if #arg ~= 2 then usage() end
680 bcsave(ctx, arg[1], arg[2]) 695 bcsave(ctx, arg[1], arg[2])