Added library function over builtin functions. (Currently only math library covered.)
This commit is contained in:
parent
038a88eca5
commit
d75507da40
176
library.lua
Normal file
176
library.lua
Normal file
|
@ -0,0 +1,176 @@
|
||||||
|
|
||||||
|
local function_library = {}
|
||||||
|
|
||||||
|
-- math (Mathematical Functions)
|
||||||
|
|
||||||
|
function_library[ math.abs ] = {
|
||||||
|
name = 'math.abs',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the absolute value of x.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.acos ] = {
|
||||||
|
name = 'math.acos',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the arc cosine of x (in radians).'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.asin ] = {
|
||||||
|
name = 'math.asin',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the arc sine of x (in radians).'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.atan ] = {
|
||||||
|
name = 'math.atan',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the arc tangent of x (in radians).'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.atan2 ] = {
|
||||||
|
name = 'math.atan2',
|
||||||
|
params = {'y', 'x'},
|
||||||
|
doc = 'Returns the arc tangent of y/x (in radians), but uses the signs of both parameters to find the quadrant of the result. (It also handles correctly the case of x being zero.)'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.ceil ] = {
|
||||||
|
name = 'math.ceil',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the smallest integer larger than or equal to x.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.cos ] = {
|
||||||
|
name = 'math.cos',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the cosine of x (assumed to be in radians).'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.cosh ] = {
|
||||||
|
name = 'math.cosh',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the hyperbolic cosine of x.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.deg ] = {
|
||||||
|
name = 'math.deg',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the angle x (given in radians) in degrees.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.exp ] = {
|
||||||
|
name = 'math.exp',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the value ex.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.floor ] = {
|
||||||
|
name = 'math.floor',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the largest integer smaller than or equal to x.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.fmod ] = {
|
||||||
|
name = 'math.fmod',
|
||||||
|
params = {'x', 'y'},
|
||||||
|
doc = 'Returns the remainder of the division of x by y that rounds the quotient towards zero.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.frexp ] = {
|
||||||
|
name = 'math.frexp',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns m and e such that x = m2e, e is an integer and the absolute value of m is in the range [0.5, 1) (or zero when x is zero).'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.ldexp ] = {
|
||||||
|
name = 'math.ldexp',
|
||||||
|
params = {'m', 'e'},
|
||||||
|
doc = 'Returns m2e (e should be an integer).'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.log ] = {
|
||||||
|
name = 'math.log',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the natural logarithm of x.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.log10 ] = {
|
||||||
|
name = 'math.log10',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the base-10 logarithm of x.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.max ] = {
|
||||||
|
name = 'math.max',
|
||||||
|
params = {'x', '...'},
|
||||||
|
doc = 'Returns the maximum value among its arguments.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.min ] = {
|
||||||
|
name = 'math.min',
|
||||||
|
params = {'x', '...'},
|
||||||
|
doc = 'Returns the minimum value among its arguments.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.modf ] = {
|
||||||
|
name = 'math.modf',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns two numbers, the integral part of x and the fractional part of x.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.pow ] = {
|
||||||
|
name = 'math.pow',
|
||||||
|
params = {'x', 'y'},
|
||||||
|
doc = 'Returns xy. (You can also use the expression x^y to compute this value.)'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.rad ] = {
|
||||||
|
name = 'math.rad',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the angle x (given in degrees) in radians.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.random ] = {
|
||||||
|
name = 'math.random',
|
||||||
|
params = {'[m [', 'n]'},
|
||||||
|
doc = 'When called without arguments, returns a uniform pseudo-random real number in the range [0,1). When called with an integer number m, math.random returns a uniform pseudo-random integer in the range [1, m]. When called with two integer numbers m and n, math.random returns a uniform pseudo-random integer in the range [m, n].'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.randomseed ] = {
|
||||||
|
name = 'math.randomseed',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Sets x as the "seed" for the pseudo-random generator: equal seeds produce equal sequences of numbers.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.sin ] = {
|
||||||
|
name = 'math.sin',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the sine of x (assumed to be in radians).'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.sinh ] = {
|
||||||
|
name = 'math.sinh',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the hyperbolic sine of x.'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.sqrt ] = {
|
||||||
|
name = 'math.sqrt',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the square root of x. (You can also use the expression x^0.5 to compute this value.)'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.tan ] = {
|
||||||
|
name = 'math.tan',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the tangent of x (assumed to be in radians).'
|
||||||
|
}
|
||||||
|
|
||||||
|
function_library[ math.tanh ] = {
|
||||||
|
name = 'math.tanh',
|
||||||
|
params = {'x'},
|
||||||
|
doc = 'Returns the hyperbolic tangent of x. '
|
||||||
|
}
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return function_library
|
34
pretty.lua
34
pretty.lua
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
|
local LIBRARY = require "library"
|
||||||
|
|
||||||
local ERROR_UNKNOWN_TYPE = [[
|
local ERROR_UNKNOWN_TYPE = [[
|
||||||
[pretty]: Attempting to format unsupported value of type "%s".
|
[pretty]: Attempting to format unsupported value of type "%s".
|
||||||
A native formatting of the value is: %s
|
A native formatting of the value is: %s
|
||||||
|
@ -190,6 +192,7 @@ local function get_function_info (f)
|
||||||
info.env = debug.getfenv(f)
|
info.env = debug.getfenv(f)
|
||||||
info.builtin = info.source == '=[C]'
|
info.builtin = info.source == '=[C]'
|
||||||
for i = 1, info.nparams do info.params[i] = debug.getlocal(f, i) end
|
for i = 1, info.nparams do info.params[i] = debug.getlocal(f, i) end
|
||||||
|
if info.isvararg then info.params[#info.params+1] = '...' end
|
||||||
for i = 1, info.nups do local k, v = debug.getupvalue(f, i); info.ups[k] = v end
|
for i = 1, info.nups do local k, v = debug.getupvalue(f, i); info.ups[k] = v end
|
||||||
|
|
||||||
if info.source:sub(1,1) == '=' then info.defined_how = 'C'
|
if info.source:sub(1,1) == '=' then info.defined_how = 'C'
|
||||||
|
@ -197,6 +200,12 @@ local function get_function_info (f)
|
||||||
else info.defined_how = 'string'
|
else info.defined_how = 'string'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if info.builtin and LIBRARY[f] then
|
||||||
|
info.name = LIBRARY[f].name
|
||||||
|
info.params = LIBRARY[f].params
|
||||||
|
info.doc = LIBRARY[f].doc
|
||||||
|
end
|
||||||
|
|
||||||
return info
|
return info
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -480,7 +489,9 @@ end
|
||||||
local function format_function (value, options, depth)
|
local function format_function (value, options, depth)
|
||||||
local info = get_function_info(value)
|
local info = get_function_info(value)
|
||||||
|
|
||||||
if info.defined_how == 'string' then return format_string_defined_function(value, options, depth) end
|
if info.defined_how == 'string' then
|
||||||
|
return format_string_defined_function(value, options, depth)
|
||||||
|
end
|
||||||
|
|
||||||
local l = {}
|
local l = {}
|
||||||
|
|
||||||
|
@ -488,7 +499,6 @@ local function format_function (value, options, depth)
|
||||||
if info.builtin then l[#l+1] = 'builtin ' end
|
if info.builtin then l[#l+1] = 'builtin ' end
|
||||||
l[#l+1] = 'function ('
|
l[#l+1] = 'function ('
|
||||||
for _, param in ipairs(info.params) do l[#l+1], l[#l+2] = param, ', ' end
|
for _, param in ipairs(info.params) do l[#l+1], l[#l+2] = param, ', ' end
|
||||||
if info.isvararg then l[#l+1] = '...' end
|
|
||||||
if l[#l] == ', ' then l[#l] = nil end
|
if l[#l] == ', ' then l[#l] = nil end
|
||||||
l[#l+1] = ')'
|
l[#l+1] = ')'
|
||||||
|
|
||||||
|
@ -514,7 +524,24 @@ local function format_function (value, options, depth)
|
||||||
else
|
else
|
||||||
-- More info! --
|
-- More info! --
|
||||||
|
|
||||||
|
-- Name
|
||||||
|
if info.name then
|
||||||
|
l[#l+1] = '\n'
|
||||||
|
l[#l+1] = options.indent
|
||||||
|
l[#l+1] = '-- '
|
||||||
|
l[#l+1] = info.name
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Doc
|
||||||
|
if info.name then
|
||||||
|
l[#l+1] = '\n'
|
||||||
|
l[#l+1] = options.indent
|
||||||
|
l[#l+1] = '-- '
|
||||||
|
l[#l+1] = info.doc
|
||||||
|
end
|
||||||
|
|
||||||
-- source
|
-- source
|
||||||
|
if not info.builtin then
|
||||||
l[#l+1] = '\n'
|
l[#l+1] = '\n'
|
||||||
l[#l+1] = options.indent
|
l[#l+1] = options.indent
|
||||||
l[#l+1] = '-- source_file: \''
|
l[#l+1] = '-- source_file: \''
|
||||||
|
@ -530,9 +557,10 @@ local function format_function (value, options, depth)
|
||||||
l[#l+1] = tostring(info.lastlinedefined)
|
l[#l+1] = tostring(info.lastlinedefined)
|
||||||
end
|
end
|
||||||
l[#l+1] = ']'
|
l[#l+1] = ']'
|
||||||
|
end
|
||||||
|
|
||||||
-- upvalues
|
-- upvalues
|
||||||
if info.nups > 0 then
|
if info.nups > 0 and not info.builtin then
|
||||||
l[#l+1] = '\n'
|
l[#l+1] = '\n'
|
||||||
l[#l+1] = options.indent
|
l[#l+1] = options.indent
|
||||||
l[#l+1] = '-- up_values: '
|
l[#l+1] = '-- up_values: '
|
||||||
|
|
|
@ -315,10 +315,33 @@ format_test {
|
||||||
expect = 'builtin function (...) ... end',
|
expect = 'builtin function (...) ... end',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
format_test {
|
||||||
|
input = math.abs,
|
||||||
|
expect = 'builtin function (x) ... end',
|
||||||
|
}
|
||||||
|
|
||||||
|
format_test {
|
||||||
|
input = math.abs,
|
||||||
|
options = { more_function_info = true },
|
||||||
|
expect = 'builtin function (x)\n\t-- math.abs\n\t-- Returns the absolute value of x.\n\n\t...\nend',
|
||||||
|
}
|
||||||
|
|
||||||
|
format_test {
|
||||||
|
input = math.random,
|
||||||
|
expect = 'builtin function ([m [, n]) ... end',
|
||||||
|
}
|
||||||
|
|
||||||
|
format_test {
|
||||||
|
input = math.random,
|
||||||
|
options = { more_function_info = true },
|
||||||
|
expect = 'builtin function ([m [, n])\n\t-- math.random\n\t-- When called without arguments, returns a uniform pseudo-random real number in the range [0,1). When called with an integer number m, math.random returns a uniform pseudo-random integer in the range [1, m]. When called with two integer numbers m and n, math.random returns a uniform pseudo-random integer in the range [m, n].\n\n\t...\nend',
|
||||||
|
}
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Userdata printing
|
-- Userdata printing
|
||||||
|
|
||||||
-- TODO. First off figure out a way to test this stuff.
|
-- TODO. First off figure out a way to test this stuff.
|
||||||
|
-- Maybe look into using the one available debug.getupvalue(pairs, 1)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Thread printing
|
-- Thread printing
|
||||||
|
|
Loading…
Reference in New Issue
Block a user