webmcp
annotate libraries/nihil/nihil.lua @ 439:29b1f7a04934
Updated documentation
author | jbe |
---|---|
date | Fri Feb 05 01:26:00 2016 +0100 (2016-02-05) |
parents | 3d43a5cf17c1 |
children |
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 rawset = rawset |
jbe/bsw@0 | 6 local setmetatable = setmetatable |
jbe/bsw@0 | 7 |
jbe@64 | 8 local _M = {} |
jbe@64 | 9 if _ENV then |
jbe@64 | 10 _ENV = _M |
jbe@64 | 11 else |
jbe@64 | 12 _G[...] = _M |
jbe@64 | 13 setfenv(1, _M) |
jbe@64 | 14 end |
jbe/bsw@0 | 15 |
jbe/bsw@0 | 16 metatable = { |
jbe/bsw@0 | 17 __tostring = function(self) |
jbe/bsw@0 | 18 return "nil" .. self[1] |
jbe/bsw@0 | 19 end, |
jbe/bsw@0 | 20 __newindex = function() |
jbe/bsw@0 | 21 error("Objects representing nil are immutable.") |
jbe/bsw@0 | 22 end |
jbe/bsw@0 | 23 } |
jbe/bsw@0 | 24 |
jbe/bsw@0 | 25 nils = setmetatable({}, { |
jbe/bsw@0 | 26 __mode = "v", |
jbe/bsw@0 | 27 __index = function(self, level) |
jbe/bsw@0 | 28 if level > 0 then |
jbe/bsw@0 | 29 local result = setmetatable({ level }, metatable) |
jbe/bsw@0 | 30 rawset(self, level, result) |
jbe/bsw@0 | 31 return result |
jbe/bsw@0 | 32 end |
jbe/bsw@0 | 33 end, |
jbe/bsw@0 | 34 __newindex = function() |
jbe/bsw@0 | 35 error("Table is immutable.") |
jbe/bsw@0 | 36 end |
jbe/bsw@0 | 37 }) |
jbe/bsw@0 | 38 |
jbe/bsw@0 | 39 function lift(value) |
jbe/bsw@0 | 40 if value == nil then |
jbe/bsw@0 | 41 return nils[1] |
jbe/bsw@0 | 42 elseif getmetatable(value) == metatable then |
jbe/bsw@0 | 43 return nils[value[1]+1] |
jbe/bsw@0 | 44 else |
jbe/bsw@0 | 45 return value |
jbe/bsw@0 | 46 end |
jbe/bsw@0 | 47 end |
jbe/bsw@0 | 48 |
jbe/bsw@0 | 49 function lower(value) |
jbe/bsw@0 | 50 if value == nil then |
jbe/bsw@0 | 51 error("Cannot lower nil.") |
jbe/bsw@0 | 52 elseif getmetatable(value) == metatable then |
jbe/bsw@0 | 53 return nils[value[1]-1] |
jbe/bsw@0 | 54 else |
jbe/bsw@0 | 55 return value |
jbe/bsw@0 | 56 end |
jbe/bsw@0 | 57 end |
jbe@64 | 58 |
jbe@64 | 59 return _M |