1 -- lua -l mlc_xcall -e 'luafile_to_astfile ("/tmp/tmp12345.lua", "/tmp/tmp54321.ast")'
2 -- lua -l mlc_xcall -e 'lua_to_astfile ("/tmp/tmp54321.ast")'
6 function mlc_xcall.server (luafilename, astfilename)
8 -- We don't want these to be loaded when people only do client-side business
9 require 'metalua.compiler'
12 -- compile the content of luafile name in an AST, serialized in astfilename
13 local ast = mlc.luafile_to_ast (luafilename)
14 local out = io.open (astfilename, 'w')
15 out:write (serialize (ast))
19 function mlc_xcall.client_file (luafile)
21 --printf("\n\nmlc_xcall.client_file(%q)\n\n", luafile)
23 local tmpfilename = os.tmpname()
24 local cmd = string.format ([[lua -l metalua.mlc_xcall -e "mlc_xcall.server('%s', '%s')"]],
25 luafile :gsub ([[\]], [[\\]]),
26 tmpfilename :gsub([[\]], [[\\]]))
28 --printf("os.execute [[%s]]\n\n", cmd)
30 local ret = os.execute (cmd)
31 if ret~=0 then error "xcall failure. FIXME: transmit failure and backtrace" end
32 local ast = (lua_loadfile or loadfile) (tmpfilename) ()
33 os.remove(tmpfilename)
37 function mlc_xcall.client_literal (luasrc)
38 local srcfilename = os.tmpname()
39 local srcfile, msg = io.open (srcfilename, 'w')
40 if not srcfile then print(msg) end
41 srcfile :write (luasrc)
43 local status, ast = mlc_xcall.client_file (srcfilename)
44 os.remove(srcfilename)