| rev | 
   line source | 
| 
poelzi@31
 | 
     1 --[[--
 | 
| 
jbe@46
 | 
     2 return_value =            -- return value of executed chunk
 | 
| 
jbe@46
 | 
     3 execute.chunk{
 | 
| 
poelzi@31
 | 
     4   file_path = file_path,  -- path to a lua source or byte-code file
 | 
| 
poelzi@31
 | 
     5   app       = app,        -- app name to use or the current will be used
 | 
| 
poelzi@31
 | 
     6   module    = module,     -- module where chunk is located
 | 
| 
jbe@46
 | 
     7   chunk     = chunk       -- name of chunk (filename without .lua extension)
 | 
| 
poelzi@32
 | 
     8   id        = id,         -- id to be returned by param.get_id(...) during execution
 | 
| 
poelzi@32
 | 
     9   params    = params      -- parameters to be returned by param.get(...) during execution
 | 
| 
poelzi@31
 | 
    10 }
 | 
| 
poelzi@31
 | 
    11 
 | 
| 
jbe@205
 | 
    12 This function loads and executes a lua file specified by a given path or constructs a path to load from the module and chunk name. A chunk name should always begin with an underscore. All return values of the loaded and executed chunk are returned by this function as well.
 | 
| 
poelzi@31
 | 
    13 
 | 
| 
poelzi@31
 | 
    14 --]]--
 | 
| 
poelzi@31
 | 
    15 
 | 
| 
jbe@205
 | 
    16 local function pack_return_values(...)
 | 
| 
jbe@205
 | 
    17   local storage = {...}
 | 
| 
jbe@205
 | 
    18   storage.n = select("#", ...)
 | 
| 
jbe@205
 | 
    19 end
 | 
| 
jbe@205
 | 
    20 
 | 
| 
jbe@205
 | 
    21 local function unpack_return_values(storage)
 | 
| 
jbe@205
 | 
    22   return table.unpack(storage, 1, storage.n)
 | 
| 
jbe@205
 | 
    23 end
 | 
| 
jbe@205
 | 
    24 
 | 
| 
jbe@46
 | 
    25 function execute.chunk(args)
 | 
| 
poelzi@31
 | 
    26   local file_path = args.file_path
 | 
| 
jbe@206
 | 
    27   local app       = args.app or WEBMCP_APP_NAME
 | 
| 
poelzi@31
 | 
    28   local module    = args.module
 | 
| 
poelzi@31
 | 
    29   local chunk     = args.chunk
 | 
| 
poelzi@32
 | 
    30   local id        = args.id
 | 
| 
poelzi@32
 | 
    31   local params    = args.params
 | 
| 
poelzi@31
 | 
    32 
 | 
| 
jbe@46
 | 
    33   file_path = file_path or encode.file_path(
 | 
| 
jbe@206
 | 
    34     WEBMCP_BASE_PATH, 'app', app, module, chunk .. '.lua'
 | 
| 
jbe@46
 | 
    35   )
 | 
| 
poelzi@32
 | 
    36 
 | 
| 
poelzi@31
 | 
    37   local func, load_errmsg = loadfile(file_path)
 | 
| 
poelzi@31
 | 
    38   if not func then
 | 
| 
poelzi@31
 | 
    39     error('Could not load file "' .. file_path .. '": ' .. load_errmsg)
 | 
| 
poelzi@31
 | 
    40   end
 | 
| 
poelzi@32
 | 
    41 
 | 
| 
poelzi@32
 | 
    42   if id or params then
 | 
| 
poelzi@32
 | 
    43     param.exchange(id, params)
 | 
| 
poelzi@32
 | 
    44   end
 | 
| 
poelzi@32
 | 
    45 
 | 
| 
jbe@205
 | 
    46   local result = pack_return_values(func())
 | 
| 
poelzi@32
 | 
    47 
 | 
| 
poelzi@32
 | 
    48   if id or params then
 | 
| 
poelzi@32
 | 
    49     param.restore()
 | 
| 
poelzi@32
 | 
    50   end
 | 
| 
poelzi@32
 | 
    51 
 | 
| 
jbe@205
 | 
    52   return unpack_return_values(result)
 | 
| 
poelzi@31
 | 
    53 end
 |