compile/squish.compile.lua

Mon, 27 Jul 2009 03:59:39 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Mon, 27 Jul 2009 03:59:39 +0100
changeset 37
cb8b48b08e1e
parent 26
a22604b2f5f3
child 45
69b3487c71cc
permissions
-rw-r--r--

Only add a module to the list once, no matter how many times it is added in the squishy file

9
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 -- Not entirely sure that this is correct
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 -- (produces files twice the size of luac)
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 -- but it appears to work...
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 function compile_string(str, name)
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 -- Strips debug info, if you're wondering :)
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 local b=string.dump(assert(loadstring(str,name)))
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local x,y=string.find(b,str.."\0")
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 if not (x and y) then return b; end -- No debug info sometimes?
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 return string.sub(b,1,x-5).."\0\0\0\0"..string.sub(b, y+1, -1)
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 end
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 function compile_file(infile_fn, outfile_fn)
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local infile, err = io.open(infile_fn);
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 if not infile then
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 print_err("Can't open input file for reading: "..tostring(err));
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 return;
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 end
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 local outfile, err = io.open(outfile_fn..".compiled", "w+");
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 if not outfile then
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 print_err("Can't open output file for writing: "..tostring(err));
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 return;
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 end
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 local data = infile:read("*a");
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 infile:close();
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 local shebang, newdata = data:match("^(#.-\n)(.+)$");
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 local code = newdata or data;
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 if shebang then
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 outfile:write(shebang)
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 end
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35
26
a22604b2f5f3 compile: Compile the correct data (fixes a traceback if there is a shebang in the input)
Matthew Wild <mwild1@gmail.com>
parents: 9
diff changeset
36 outfile:write(compile_string(code, outfile_fn));
9
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 os.rename(outfile_fn..".compiled", outfile_fn);
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 end
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 if opts.compile then
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 print_info("Compiling "..out_fn.."...");
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 compile_file(out_fn, out_fn);
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 print_info("OK!");
875ff34ab96c compile: Compile output files to Lua bytecode
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 end

mercurial