webmcp
annotate libraries/nihil/nihil.lua @ 31:1cd9e69b85cb
add execute.load_chunk(args)
load_chunk loads the content of a lua file and returns the code.
It can construct the path name easily so you can put helper code in
seperate files for DRYness.
load_chunk loads the content of a lua file and returns the code.
It can construct the path name easily so you can put helper code in
seperate files for DRYness.
| author | Daniel Poelzleithner <poelzi@poelzi.org> | 
|---|---|
| date | Tue Oct 05 02:34:04 2010 +0200 (2010-10-05) | 
| parents | 9fdfb27f8e67 | 
| children | 3d43a5cf17c1 | 
| rev | line source | 
|---|---|
| jbe/bsw@0 | 1 #!/usr/bin/env lua | 
| jbe/bsw@0 | 2 | 
| jbe/bsw@0 | 3 local error = error | 
| jbe/bsw@0 | 4 local getmetatable = getmetatable | 
| jbe/bsw@0 | 5 local module = module | 
| jbe/bsw@0 | 6 local rawset = rawset | 
| jbe/bsw@0 | 7 local setmetatable = setmetatable | 
| jbe/bsw@0 | 8 | 
| jbe/bsw@0 | 9 module(...) | 
| jbe/bsw@0 | 10 | 
| jbe/bsw@0 | 11 metatable = { | 
| jbe/bsw@0 | 12 __tostring = function(self) | 
| jbe/bsw@0 | 13 return "nil" .. self[1] | 
| jbe/bsw@0 | 14 end, | 
| jbe/bsw@0 | 15 __newindex = function() | 
| jbe/bsw@0 | 16 error("Objects representing nil are immutable.") | 
| jbe/bsw@0 | 17 end | 
| jbe/bsw@0 | 18 } | 
| jbe/bsw@0 | 19 | 
| jbe/bsw@0 | 20 nils = setmetatable({}, { | 
| jbe/bsw@0 | 21 __mode = "v", | 
| jbe/bsw@0 | 22 __index = function(self, level) | 
| jbe/bsw@0 | 23 if level > 0 then | 
| jbe/bsw@0 | 24 local result = setmetatable({ level }, metatable) | 
| jbe/bsw@0 | 25 rawset(self, level, result) | 
| jbe/bsw@0 | 26 return result | 
| jbe/bsw@0 | 27 end | 
| jbe/bsw@0 | 28 end, | 
| jbe/bsw@0 | 29 __newindex = function() | 
| jbe/bsw@0 | 30 error("Table is immutable.") | 
| jbe/bsw@0 | 31 end | 
| jbe/bsw@0 | 32 }) | 
| jbe/bsw@0 | 33 | 
| jbe/bsw@0 | 34 function lift(value) | 
| jbe/bsw@0 | 35 if value == nil then | 
| jbe/bsw@0 | 36 return nils[1] | 
| jbe/bsw@0 | 37 elseif getmetatable(value) == metatable then | 
| jbe/bsw@0 | 38 return nils[value[1]+1] | 
| jbe/bsw@0 | 39 else | 
| jbe/bsw@0 | 40 return value | 
| jbe/bsw@0 | 41 end | 
| jbe/bsw@0 | 42 end | 
| jbe/bsw@0 | 43 | 
| jbe/bsw@0 | 44 function lower(value) | 
| jbe/bsw@0 | 45 if value == nil then | 
| jbe/bsw@0 | 46 error("Cannot lower nil.") | 
| jbe/bsw@0 | 47 elseif getmetatable(value) == metatable then | 
| jbe/bsw@0 | 48 return nils[value[1]-1] | 
| jbe/bsw@0 | 49 else | 
| jbe/bsw@0 | 50 return value | 
| jbe/bsw@0 | 51 end | 
| jbe/bsw@0 | 52 end |