webmcp
annotate framework/env/execute/chunk.lua @ 110:0c4841af07a5
String truncating by counting Unicode codepoints in format.string(...)
(grapheme cluster boundary detection not implemented)
(grapheme cluster boundary detection not implemented)
| author | jbe | 
|---|---|
| date | Sun Jan 12 03:57:47 2014 +0100 (2014-01-12) | 
| parents | 3d43a5cf17c1 | 
| children | 48ee8826efbe | 
| 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 | 
| poelzi@31 | 12 This function loads and executes a lua file specified by a given path or constructs | 
| jbe@46 | 13 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 | 14 | 
| poelzi@31 | 15 --]]-- | 
| poelzi@31 | 16 | 
| jbe@46 | 17 function execute.chunk(args) | 
| poelzi@31 | 18 local file_path = args.file_path | 
| poelzi@31 | 19 local app = args.app | 
| poelzi@31 | 20 local module = args.module | 
| poelzi@31 | 21 local chunk = args.chunk | 
| poelzi@32 | 22 local id = args.id | 
| poelzi@32 | 23 local params = args.params | 
| poelzi@31 | 24 | 
| poelzi@31 | 25 app = app or request.get_app_name() | 
| poelzi@31 | 26 | 
| jbe@46 | 27 file_path = file_path or encode.file_path( | 
| jbe@46 | 28 request.get_app_basepath(), | 
| jbe@46 | 29 'app', app, module, chunk .. '.lua' | 
| jbe@46 | 30 ) | 
| poelzi@32 | 31 | 
| poelzi@31 | 32 local func, load_errmsg = loadfile(file_path) | 
| poelzi@31 | 33 if not func then | 
| poelzi@31 | 34 error('Could not load file "' .. file_path .. '": ' .. load_errmsg) | 
| poelzi@31 | 35 end | 
| poelzi@32 | 36 | 
| poelzi@32 | 37 if id or params then | 
| poelzi@32 | 38 param.exchange(id, params) | 
| poelzi@32 | 39 end | 
| poelzi@32 | 40 | 
| jbe@46 | 41 local result = {func()} | 
| poelzi@32 | 42 | 
| poelzi@32 | 43 if id or params then | 
| poelzi@32 | 44 param.restore() | 
| poelzi@32 | 45 end | 
| poelzi@32 | 46 | 
| jbe@64 | 47 return table.unpack(result) | 
| poelzi@31 | 48 end |