mirror of
https://github.com/janet-lang/janet
synced 2024-11-16 13:44:48 +00:00
Merge pull request #730 from yumaikas/new-style-math-bindings
Update math.c for the new style
This commit is contained in:
commit
58c78d0d78
402
src/core/math.c
402
src/core/math.c
@ -117,7 +117,12 @@ double janet_rng_double(JanetRNG *rng) {
|
|||||||
return ldexp((double)(big >> (64 - 52)), -52);
|
return ldexp((double)(big >> (64 - 52)), -52);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Janet cfun_rng_make(int32_t argc, Janet *argv) {
|
JANET_CORE_FN(cfun_rng_make,
|
||||||
|
"(math/rng &opt seed)",
|
||||||
|
"Creates a Psuedo-Random number generator, with an optional seed. "
|
||||||
|
"The seed should be an unsigned 32 bit integer or a buffer. "
|
||||||
|
"Do not use this for cryptography. Returns a core/rng abstract type."
|
||||||
|
) {
|
||||||
janet_arity(argc, 0, 1);
|
janet_arity(argc, 0, 1);
|
||||||
JanetRNG *rng = janet_abstract(&janet_rng_type, sizeof(JanetRNG));
|
JanetRNG *rng = janet_abstract(&janet_rng_type, sizeof(JanetRNG));
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
@ -134,13 +139,21 @@ static Janet cfun_rng_make(int32_t argc, Janet *argv) {
|
|||||||
return janet_wrap_abstract(rng);
|
return janet_wrap_abstract(rng);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Janet cfun_rng_uniform(int32_t argc, Janet *argv) {
|
JANET_CORE_FN(cfun_rng_uniform,
|
||||||
|
"(math/rng-uniform rng)",
|
||||||
|
"Extract a random random integer in the range [0, max] from the RNG. If "
|
||||||
|
"no max is given, the default is 2^31 - 1."
|
||||||
|
) {
|
||||||
janet_fixarity(argc, 1);
|
janet_fixarity(argc, 1);
|
||||||
JanetRNG *rng = janet_getabstract(argv, 0, &janet_rng_type);
|
JanetRNG *rng = janet_getabstract(argv, 0, &janet_rng_type);
|
||||||
return janet_wrap_number(janet_rng_double(rng));
|
return janet_wrap_number(janet_rng_double(rng));
|
||||||
}
|
}
|
||||||
|
|
||||||
static Janet cfun_rng_int(int32_t argc, Janet *argv) {
|
JANET_CORE_FN(cfun_rng_int,
|
||||||
|
"(math/rng-int rng &opt max)",
|
||||||
|
"Extract a random random integer in the range [0, max] from the RNG. If "
|
||||||
|
"no max is given, the default is 2^31 - 1."
|
||||||
|
) {
|
||||||
janet_arity(argc, 1, 2);
|
janet_arity(argc, 1, 2);
|
||||||
JanetRNG *rng = janet_getabstract(argv, 0, &janet_rng_type);
|
JanetRNG *rng = janet_getabstract(argv, 0, &janet_rng_type);
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
@ -168,7 +181,11 @@ static void rng_get_4bytes(JanetRNG *rng, uint8_t *buf) {
|
|||||||
buf[3] = (word >> 24) & 0xFF;
|
buf[3] = (word >> 24) & 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Janet cfun_rng_buffer(int32_t argc, Janet *argv) {
|
JANET_CORE_FN(cfun_rng_buffer,
|
||||||
|
"(math/rng-buffer rng n &opt buf)",
|
||||||
|
"Get n random bytes and put them in a buffer. Creates a new buffer if no buffer is "
|
||||||
|
"provided, otherwise appends to the given buffer. Returns the buffer."
|
||||||
|
) {
|
||||||
janet_arity(argc, 2, 3);
|
janet_arity(argc, 2, 3);
|
||||||
JanetRNG *rng = janet_getabstract(argv, 0, &janet_rng_type);
|
JanetRNG *rng = janet_getabstract(argv, 0, &janet_rng_type);
|
||||||
int32_t n = janet_getnat(argv, 1);
|
int32_t n = janet_getnat(argv, 1);
|
||||||
@ -213,14 +230,20 @@ static Janet janet_rng_next(void *p, Janet key) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Get a random number */
|
/* Get a random number */
|
||||||
static Janet janet_rand(int32_t argc, Janet *argv) {
|
JANET_CORE_FN(janet_rand,
|
||||||
|
"(math/random)",
|
||||||
|
"Returns a uniformly distributed random number between 0 and 1") {
|
||||||
(void) argv;
|
(void) argv;
|
||||||
janet_fixarity(argc, 0);
|
janet_fixarity(argc, 0);
|
||||||
return janet_wrap_number(janet_rng_double(&janet_vm.rng));
|
return janet_wrap_number(janet_rng_double(&janet_vm.rng));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Seed the random number generator */
|
/* Seed the random number generator */
|
||||||
static Janet janet_srand(int32_t argc, Janet *argv) {
|
JANET_CORE_FN(janet_srand,
|
||||||
|
"(math/seedrandom seed)",
|
||||||
|
"Set the seed for the random number generator. seed should be "
|
||||||
|
"an integer or a buffer."
|
||||||
|
) {
|
||||||
janet_fixarity(argc, 1);
|
janet_fixarity(argc, 1);
|
||||||
if (janet_checkint(argv[0])) {
|
if (janet_checkint(argv[0])) {
|
||||||
uint32_t seed = (uint32_t)(janet_getinteger(argv, 0));
|
uint32_t seed = (uint32_t)(janet_getinteger(argv, 0));
|
||||||
@ -232,295 +255,130 @@ static Janet janet_srand(int32_t argc, Janet *argv) {
|
|||||||
return janet_wrap_nil();
|
return janet_wrap_nil();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define JANET_DEFINE_MATHOP(name, fop)\
|
#define JANET_DEFINE_MATHOP(name, fop, doc)\
|
||||||
static Janet janet_##name(int32_t argc, Janet *argv) {\
|
JANET_CORE_FN(janet_##name, "(math/##name x)", doc) {\
|
||||||
janet_fixarity(argc, 1); \
|
janet_fixarity(argc, 1); \
|
||||||
double x = janet_getnumber(argv, 0); \
|
double x = janet_getnumber(argv, 0); \
|
||||||
return janet_wrap_number(fop(x)); \
|
return janet_wrap_number(fop(x)); \
|
||||||
}
|
}
|
||||||
|
|
||||||
JANET_DEFINE_MATHOP(acos, acos)
|
JANET_DEFINE_MATHOP(acos, acos, "Returns the arccosize of x.")
|
||||||
JANET_DEFINE_MATHOP(asin, asin)
|
JANET_DEFINE_MATHOP(asin, asin, "Returns the arcsin of x.")
|
||||||
JANET_DEFINE_MATHOP(atan, atan)
|
JANET_DEFINE_MATHOP(atan, atan, "Returns the arctangent of x.")
|
||||||
JANET_DEFINE_MATHOP(cos, cos)
|
JANET_DEFINE_MATHOP(cos, cos, "Returns the cosine of x.")
|
||||||
JANET_DEFINE_MATHOP(cosh, cosh)
|
JANET_DEFINE_MATHOP(cosh, cosh, "Returns the hyperbolic cosine of x.")
|
||||||
JANET_DEFINE_MATHOP(acosh, acosh)
|
JANET_DEFINE_MATHOP(acosh, acosh, "Returns the hyperbolic arccosine of x.")
|
||||||
JANET_DEFINE_MATHOP(sin, sin)
|
JANET_DEFINE_MATHOP(sin, sin, "Returns the sine of x.")
|
||||||
JANET_DEFINE_MATHOP(sinh, sinh)
|
JANET_DEFINE_MATHOP(sinh, sinh, "Returns the hyperbolic sine of x.")
|
||||||
JANET_DEFINE_MATHOP(asinh, asinh)
|
JANET_DEFINE_MATHOP(asinh, asinh, "Returns the hypberbolic arcsine of x.")
|
||||||
JANET_DEFINE_MATHOP(tan, tan)
|
JANET_DEFINE_MATHOP(tan, tan, "Returns the tangent of x.")
|
||||||
JANET_DEFINE_MATHOP(tanh, tanh)
|
JANET_DEFINE_MATHOP(tanh, tanh, "Returns the hyperbolic tangent of x.")
|
||||||
JANET_DEFINE_MATHOP(atanh, atanh)
|
JANET_DEFINE_MATHOP(atanh, atanh, "Returns the hyperbolic arctangent of x.")
|
||||||
JANET_DEFINE_MATHOP(exp, exp)
|
JANET_DEFINE_MATHOP(exp, exp, "Returns e to the power of x.")
|
||||||
JANET_DEFINE_MATHOP(exp2, exp2)
|
JANET_DEFINE_MATHOP(exp2, exp2, "Returns 2 to the power of x.")
|
||||||
JANET_DEFINE_MATHOP(expm1, expm1)
|
JANET_DEFINE_MATHOP(expm1, expm1, "Returns e to the power of x minus 1.")
|
||||||
JANET_DEFINE_MATHOP(log, log)
|
JANET_DEFINE_MATHOP(log, log, "Returns the natural logarithm of x.")
|
||||||
JANET_DEFINE_MATHOP(log10, log10)
|
JANET_DEFINE_MATHOP(log10, log10, "Returns the log base 10 of x.")
|
||||||
JANET_DEFINE_MATHOP(log2, log2)
|
JANET_DEFINE_MATHOP(log2, log2, "Returns the log base 2 of x.")
|
||||||
JANET_DEFINE_MATHOP(sqrt, sqrt)
|
JANET_DEFINE_MATHOP(sqrt, sqrt, "Returns the square root of x.")
|
||||||
JANET_DEFINE_MATHOP(cbrt, cbrt)
|
JANET_DEFINE_MATHOP(cbrt, cbrt, "Returns the cube root of x.")
|
||||||
JANET_DEFINE_MATHOP(ceil, ceil)
|
JANET_DEFINE_MATHOP(ceil, ceil, "Returns the smallest integer value number that is not less than x.")
|
||||||
JANET_DEFINE_MATHOP(fabs, fabs)
|
JANET_DEFINE_MATHOP(fabs, fabs, "Return the absolute value of x.")
|
||||||
JANET_DEFINE_MATHOP(floor, floor)
|
JANET_DEFINE_MATHOP(floor, floor, "Returns the largest integer value number that is not greater than x.")
|
||||||
JANET_DEFINE_MATHOP(trunc, trunc)
|
JANET_DEFINE_MATHOP(trunc, trunc, "Returns the integer between x and 0 nearest to x.")
|
||||||
JANET_DEFINE_MATHOP(round, round)
|
JANET_DEFINE_MATHOP(round, round, "Returns the integer nearest to x.")
|
||||||
JANET_DEFINE_MATHOP(gamma, lgamma)
|
JANET_DEFINE_MATHOP(gamma, lgamma, "Returns gamma(x).")
|
||||||
JANET_DEFINE_MATHOP(log1p, log1p)
|
JANET_DEFINE_MATHOP(log1p, log1p, "Returns (log base e of x) + 1 more accurately than (+ (math/log x) 1)")
|
||||||
JANET_DEFINE_MATHOP(erf, erf)
|
JANET_DEFINE_MATHOP(erf, erf, "Returns the error function of x.")
|
||||||
JANET_DEFINE_MATHOP(erfc, erfc)
|
JANET_DEFINE_MATHOP(erfc, erfc, "Returns the complementary error function of x.")
|
||||||
|
|
||||||
#define JANET_DEFINE_MATH2OP(name, fop)\
|
#define JANET_DEFINE_MATH2OP(name, fop, signature, doc)\
|
||||||
static Janet janet_##name(int32_t argc, Janet *argv) {\
|
JANET_CORE_FN(janet_##name, signature, doc) {\
|
||||||
janet_fixarity(argc, 2); \
|
janet_fixarity(argc, 2); \
|
||||||
double lhs = janet_getnumber(argv, 0); \
|
double lhs = janet_getnumber(argv, 0); \
|
||||||
double rhs = janet_getnumber(argv, 1); \
|
double rhs = janet_getnumber(argv, 1); \
|
||||||
return janet_wrap_number(fop(lhs, rhs)); \
|
return janet_wrap_number(fop(lhs, rhs)); \
|
||||||
}\
|
}
|
||||||
|
|
||||||
JANET_DEFINE_MATH2OP(atan2, atan2)
|
JANET_DEFINE_MATH2OP(atan2, atan2, "(math/atan2 y x)", "Returns the arctangent of y/x. Works even when x is 0.")
|
||||||
JANET_DEFINE_MATH2OP(pow, pow)
|
JANET_DEFINE_MATH2OP(pow, pow, "(math/pow a x)", "Returns a to the power of x.")
|
||||||
JANET_DEFINE_MATH2OP(hypot, hypot)
|
JANET_DEFINE_MATH2OP(hypot, hypot, "(math/hypot a b)", "Returns c from the equation c^2 = a^2 + b^2.")
|
||||||
JANET_DEFINE_MATH2OP(nextafter, nextafter)
|
JANET_DEFINE_MATH2OP(nextafter, nextafter, "(math/next x y)", "Returns the next representable floating point vaue after x in the direction of y.")
|
||||||
|
|
||||||
static Janet janet_not(int32_t argc, Janet *argv) {
|
JANET_CORE_FN(janet_not, "(not x)", "Returns the boolean inverse of x.") {
|
||||||
janet_fixarity(argc, 1);
|
janet_fixarity(argc, 1);
|
||||||
return janet_wrap_boolean(!janet_truthy(argv[0]));
|
return janet_wrap_boolean(!janet_truthy(argv[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static const JanetReg math_cfuns[] = {
|
|
||||||
{
|
|
||||||
"not", janet_not,
|
|
||||||
JDOC("(not x)\n\nReturns the boolean inverse of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/random", janet_rand,
|
|
||||||
JDOC("(math/random)\n\n"
|
|
||||||
"Returns a uniformly distributed random number between 0 and 1.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/seedrandom", janet_srand,
|
|
||||||
JDOC("(math/seedrandom seed)\n\n"
|
|
||||||
"Set the seed for the random number generator. seed should be "
|
|
||||||
"an integer or a buffer.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/cos", janet_cos,
|
|
||||||
JDOC("(math/cos x)\n\n"
|
|
||||||
"Returns the cosine of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/sin", janet_sin,
|
|
||||||
JDOC("(math/sin x)\n\n"
|
|
||||||
"Returns the sine of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/tan", janet_tan,
|
|
||||||
JDOC("(math/tan x)\n\n"
|
|
||||||
"Returns the tangent of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/acos", janet_acos,
|
|
||||||
JDOC("(math/acos x)\n\n"
|
|
||||||
"Returns the arccosine of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/asin", janet_asin,
|
|
||||||
JDOC("(math/asin x)\n\n"
|
|
||||||
"Returns the arcsine of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/atan", janet_atan,
|
|
||||||
JDOC("(math/atan x)\n\n"
|
|
||||||
"Returns the arctangent of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/exp", janet_exp,
|
|
||||||
JDOC("(math/exp x)\n\n"
|
|
||||||
"Returns e to the power of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/log", janet_log,
|
|
||||||
JDOC("(math/log x)\n\n"
|
|
||||||
"Returns log base natural number of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/log10", janet_log10,
|
|
||||||
JDOC("(math/log10 x)\n\n"
|
|
||||||
"Returns log base 10 of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/log2", janet_log2,
|
|
||||||
JDOC("(math/log2 x)\n\n"
|
|
||||||
"Returns log base 2 of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/sqrt", janet_sqrt,
|
|
||||||
JDOC("(math/sqrt x)\n\n"
|
|
||||||
"Returns the square root of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/cbrt", janet_cbrt,
|
|
||||||
JDOC("(math/cbrt x)\n\n"
|
|
||||||
"Returns the cube root of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/floor", janet_floor,
|
|
||||||
JDOC("(math/floor x)\n\n"
|
|
||||||
"Returns the largest integer value number that is not greater than x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/ceil", janet_ceil,
|
|
||||||
JDOC("(math/ceil x)\n\n"
|
|
||||||
"Returns the smallest integer value number that is not less than x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/pow", janet_pow,
|
|
||||||
JDOC("(math/pow a x)\n\n"
|
|
||||||
"Return a to the power of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/abs", janet_fabs,
|
|
||||||
JDOC("(math/abs x)\n\n"
|
|
||||||
"Return the absolute value of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/sinh", janet_sinh,
|
|
||||||
JDOC("(math/sinh x)\n\n"
|
|
||||||
"Return the hyperbolic sine of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/cosh", janet_cosh,
|
|
||||||
JDOC("(math/cosh x)\n\n"
|
|
||||||
"Return the hyperbolic cosine of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/tanh", janet_tanh,
|
|
||||||
JDOC("(math/tanh x)\n\n"
|
|
||||||
"Return the hyperbolic tangent of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/atanh", janet_atanh,
|
|
||||||
JDOC("(math/atanh x)\n\n"
|
|
||||||
"Return the hyperbolic arctangent of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/asinh", janet_asinh,
|
|
||||||
JDOC("(math/asinh x)\n\n"
|
|
||||||
"Return the hyperbolic arcsine of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/acosh", janet_acosh,
|
|
||||||
JDOC("(math/acosh x)\n\n"
|
|
||||||
"Return the hyperbolic arccosine of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/atan2", janet_atan2,
|
|
||||||
JDOC("(math/atan2 y x)\n\n"
|
|
||||||
"Return the arctangent of y/x. Works even when x is 0.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/rng", cfun_rng_make,
|
|
||||||
JDOC("(math/rng &opt seed)\n\n"
|
|
||||||
"Creates a Psuedo-Random number generator, with an optional seed. "
|
|
||||||
"The seed should be an unsigned 32 bit integer or a buffer. "
|
|
||||||
"Do not use this for cryptography. Returns a core/rng abstract type.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/rng-uniform", cfun_rng_uniform,
|
|
||||||
JDOC("(math/rng-seed rng seed)\n\n"
|
|
||||||
"Extract a random number in the range [0, 1) from the RNG.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/rng-int", cfun_rng_int,
|
|
||||||
JDOC("(math/rng-int rng &opt max)\n\n"
|
|
||||||
"Extract a random random integer in the range [0, max] from the RNG. If "
|
|
||||||
"no max is given, the default is 2^31 - 1.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/rng-buffer", cfun_rng_buffer,
|
|
||||||
JDOC("(math/rng-buffer rng n &opt buf)\n\n"
|
|
||||||
"Get n random bytes and put them in a buffer. Creates a new buffer if no buffer is "
|
|
||||||
"provided, otherwise appends to the given buffer. Returns the buffer.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/hypot", janet_hypot,
|
|
||||||
JDOC("(math/hypot a b)\n\n"
|
|
||||||
"Returns the c from the equation c^2 = a^2 + b^2")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/exp2", janet_exp2,
|
|
||||||
JDOC("(math/exp2 x)\n\n"
|
|
||||||
"Returns 2 to the power of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/log1p", janet_log1p,
|
|
||||||
JDOC("(math/log1p x)\n\n"
|
|
||||||
"Returns (log base e of x) + 1 more accurately than (+ (math/log x) 1)")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/gamma", janet_gamma,
|
|
||||||
JDOC("(math/gamma x)\n\n"
|
|
||||||
"Returns gamma(x).")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/erfc", janet_erfc,
|
|
||||||
JDOC("(math/erfc x)\n\n"
|
|
||||||
"Returns the complementary error function of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/erf", janet_erf,
|
|
||||||
JDOC("(math/erf x)\n\n"
|
|
||||||
"Returns the error function of x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/expm1", janet_expm1,
|
|
||||||
JDOC("(math/expm1 x)\n\n"
|
|
||||||
"Returns e to the power of x minus 1.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/trunc", janet_trunc,
|
|
||||||
JDOC("(math/trunc x)\n\n"
|
|
||||||
"Returns the integer between x and 0 nearest to x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/round", janet_round,
|
|
||||||
JDOC("(math/round x)\n\n"
|
|
||||||
"Returns the integer nearest to x.")
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"math/next", janet_nextafter,
|
|
||||||
JDOC("(math/next x y)\n\n"
|
|
||||||
"Returns the next representable floating point value after x in the direction of y.")
|
|
||||||
},
|
|
||||||
{NULL, NULL, NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Module entry point */
|
/* Module entry point */
|
||||||
void janet_lib_math(JanetTable *env) {
|
void janet_lib_math(JanetTable *env) {
|
||||||
janet_core_cfuns(env, NULL, math_cfuns);
|
JanetRegExt math_cfuns[] = {
|
||||||
|
JANET_CORE_REG("not", janet_not),
|
||||||
|
JANET_CORE_REG("math/random", janet_rand),
|
||||||
|
JANET_CORE_REG("math/seedrandom", janet_srand),
|
||||||
|
JANET_CORE_REG("math/cos", janet_cos),
|
||||||
|
JANET_CORE_REG("math/sin", janet_sin),
|
||||||
|
JANET_CORE_REG("math/tan", janet_tan),
|
||||||
|
JANET_CORE_REG("math/acos", janet_acos),
|
||||||
|
JANET_CORE_REG("math/asin", janet_asin),
|
||||||
|
JANET_CORE_REG("math/atan", janet_atan),
|
||||||
|
JANET_CORE_REG("math/exp", janet_exp),
|
||||||
|
JANET_CORE_REG("math/log", janet_log),
|
||||||
|
JANET_CORE_REG("math/log10", janet_log10),
|
||||||
|
JANET_CORE_REG("math/log2", janet_log2),
|
||||||
|
JANET_CORE_REG("math/sqrt", janet_sqrt),
|
||||||
|
JANET_CORE_REG("math/cbrt", janet_cbrt),
|
||||||
|
JANET_CORE_REG("math/floor", janet_floor),
|
||||||
|
JANET_CORE_REG("math/ceil", janet_ceil),
|
||||||
|
JANET_CORE_REG("math/pow", janet_pow),
|
||||||
|
JANET_CORE_REG("math/abs", janet_fabs),
|
||||||
|
JANET_CORE_REG("math/sinh", janet_sinh),
|
||||||
|
JANET_CORE_REG("math/cosh", janet_cosh),
|
||||||
|
JANET_CORE_REG("math/tanh", janet_tanh),
|
||||||
|
JANET_CORE_REG("math/atanh", janet_atanh),
|
||||||
|
JANET_CORE_REG("math/asinh", janet_asinh),
|
||||||
|
JANET_CORE_REG("math/acosh", janet_acosh),
|
||||||
|
JANET_CORE_REG("math/atan2", janet_atan2),
|
||||||
|
JANET_CORE_REG("math/rng", cfun_rng_make),
|
||||||
|
JANET_CORE_REG("math/rng-uniform", cfun_rng_uniform),
|
||||||
|
JANET_CORE_REG("math/rng-int", cfun_rng_int),
|
||||||
|
JANET_CORE_REG("math/rng-buffer", cfun_rng_buffer),
|
||||||
|
JANET_CORE_REG("math/hypot", janet_hypot),
|
||||||
|
JANET_CORE_REG("math/exp2", janet_exp2),
|
||||||
|
JANET_CORE_REG("math/log1p", janet_log1p),
|
||||||
|
JANET_CORE_REG("math/gamma", janet_gamma),
|
||||||
|
JANET_CORE_REG("math/erfc", janet_erfc),
|
||||||
|
JANET_CORE_REG("math/erf", janet_erf),
|
||||||
|
JANET_CORE_REG("math/expm1", janet_expm1),
|
||||||
|
JANET_CORE_REG("math/trunc", janet_trunc),
|
||||||
|
JANET_CORE_REG("math/round", janet_round),
|
||||||
|
JANET_CORE_REG("math/next", janet_nextafter),
|
||||||
|
JANET_REG_END
|
||||||
|
};
|
||||||
|
janet_core_cfuns_ext(env, NULL, math_cfuns);
|
||||||
janet_register_abstract_type(&janet_rng_type);
|
janet_register_abstract_type(&janet_rng_type);
|
||||||
#ifdef JANET_BOOTSTRAP
|
#ifdef JANET_BOOTSTRAP
|
||||||
janet_def(env, "math/pi", janet_wrap_number(3.1415926535897931),
|
JANET_CORE_DEF(env, "math/pi", janet_wrap_number(3.1415926535897931),
|
||||||
JDOC("The value pi."));
|
"The value pi.");
|
||||||
janet_def(env, "math/e", janet_wrap_number(2.7182818284590451),
|
JANET_CORE_DEF(env, "math/e", janet_wrap_number(2.7182818284590451),
|
||||||
JDOC("The base of the natural log."));
|
"The base of the natural log.");
|
||||||
janet_def(env, "math/inf", janet_wrap_number(INFINITY),
|
JANET_CORE_DEF(env, "math/inf", janet_wrap_number(INFINITY),
|
||||||
JDOC("The number representing positive infinity"));
|
"The number representing positive infinity");
|
||||||
janet_def(env, "math/-inf", janet_wrap_number(-INFINITY),
|
JANET_CORE_DEF(env, "math/-inf", janet_wrap_number(-INFINITY),
|
||||||
JDOC("The number representing negative infinity"));
|
"The number representing negative infinity");
|
||||||
janet_def(env, "math/int32-min", janet_wrap_number(INT32_MIN),
|
JANET_CORE_DEF(env, "math/int32-min", janet_wrap_number(INT32_MIN),
|
||||||
JDOC("The minimum contiguous integer representable by a 32 bit signed integer"));
|
"The minimum contiguous integer representable by a 32 bit signed integer");
|
||||||
janet_def(env, "math/int32-max", janet_wrap_number(INT32_MAX),
|
JANET_CORE_DEF(env, "math/int32-max", janet_wrap_number(INT32_MAX),
|
||||||
JDOC("The maximum contiguous integer represtenable by a 32 bit signed integer"));
|
"The maximum contiguous integer represtenable by a 32 bit signed integer");
|
||||||
janet_def(env, "math/int-min", janet_wrap_number(JANET_INTMIN_DOUBLE),
|
JANET_CORE_DEF(env, "math/int-min", janet_wrap_number(JANET_INTMIN_DOUBLE),
|
||||||
JDOC("The minimum contiguous integer representable by a double (2^53)"));
|
"The minimum contiguous integer representable by a double (2^53)");
|
||||||
janet_def(env, "math/int-max", janet_wrap_number(JANET_INTMAX_DOUBLE),
|
JANET_CORE_DEF(env, "math/int-max", janet_wrap_number(JANET_INTMAX_DOUBLE),
|
||||||
JDOC("The maximum contiguous integer represtenable by a double (-(2^53))"));
|
"The maximum contiguous integer represtenable by a double (-(2^53))");
|
||||||
#ifdef NAN
|
#ifdef NAN
|
||||||
janet_def(env, "math/nan", janet_wrap_number(NAN),
|
JANET_CORE_DEF(env, "math/nan", janet_wrap_number(NAN), "Not a number (IEEE-754 NaN");
|
||||||
#else
|
#else
|
||||||
janet_def(env, "math/nan", janet_wrap_number(0.0 / 0.0),
|
JANET_CORE_DEF(env, "math/nan", janet_wrap_number(0.0 / 0.0), "Not a number (IEEE-754 NaN)");
|
||||||
#endif
|
#endif
|
||||||
JDOC("Not a number (IEEE-754 NaN)"));
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -92,6 +92,7 @@ Janet janet_next_impl(Janet ds, Janet key, int is_interpreter);
|
|||||||
#ifdef JANET_BOOTSTRAP
|
#ifdef JANET_BOOTSTRAP
|
||||||
#define JANET_CORE_REG JANET_REG
|
#define JANET_CORE_REG JANET_REG
|
||||||
#define JANET_CORE_FN JANET_FN
|
#define JANET_CORE_FN JANET_FN
|
||||||
|
#define JANET_CORE_DEF JANET_DEF
|
||||||
#define janet_core_def janet_def
|
#define janet_core_def janet_def
|
||||||
#define janet_core_cfuns janet_cfuns
|
#define janet_core_cfuns janet_cfuns
|
||||||
#define janet_core_def_sm janet_def_sm
|
#define janet_core_def_sm janet_def_sm
|
||||||
@ -99,6 +100,7 @@ Janet janet_next_impl(Janet ds, Janet key, int is_interpreter);
|
|||||||
#else
|
#else
|
||||||
#define JANET_CORE_REG JANET_REG_
|
#define JANET_CORE_REG JANET_REG_
|
||||||
#define JANET_CORE_FN JANET_FN_
|
#define JANET_CORE_FN JANET_FN_
|
||||||
|
#define JANET_CORE_DEF JANET_DEF_
|
||||||
void janet_core_def(JanetTable *env, const char *name, Janet x, const void *p);
|
void janet_core_def(JanetTable *env, const char *name, Janet x, const void *p);
|
||||||
void janet_core_cfuns(JanetTable *env, const char *regprefix, const JanetReg *cfuns);
|
void janet_core_cfuns(JanetTable *env, const char *regprefix, const JanetReg *cfuns);
|
||||||
void janet_core_def_sm(JanetTable *env, const char *name, Janet x, const void *p, const void *sf, int32_t sl);
|
void janet_core_def_sm(JanetTable *env, const char *name, Janet x, const void *p, const void *sf, int32_t sl);
|
||||||
|
@ -1766,18 +1766,24 @@ JANET_API Janet janet_resolve_core(const char *name);
|
|||||||
#define JANET_REG_(JNAME, CNAME) {JNAME, CNAME, NULL, NULL, 0}
|
#define JANET_REG_(JNAME, CNAME) {JNAME, CNAME, NULL, NULL, 0}
|
||||||
#define JANET_FN_(CNAME, USAGE, DOCSTRING) \
|
#define JANET_FN_(CNAME, USAGE, DOCSTRING) \
|
||||||
Janet CNAME (int32_t argc, Janet *argv)
|
Janet CNAME (int32_t argc, Janet *argv)
|
||||||
|
#define JANET_DEF_(ENV, JNAME, VAL, DOC) \
|
||||||
|
janet_def(ENV, JNAME, VAL, NULL)
|
||||||
|
|
||||||
/* sourcemaps only */
|
/* sourcemaps only */
|
||||||
#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
|
#define JANET_REG_S(JNAME, CNAME) {JNAME, CNAME, NULL, __FILE__, CNAME##_sourceline_}
|
||||||
#define JANET_FN_S(CNAME, USAGE, DOCSTRING) \
|
#define JANET_FN_S(CNAME, USAGE, DOCSTRING) \
|
||||||
static int32_t CNAME##_sourceline_ = __LINE__; \
|
static int32_t CNAME##_sourceline_ = __LINE__; \
|
||||||
Janet CNAME (int32_t argc, Janet *argv)
|
Janet CNAME (int32_t argc, Janet *argv)
|
||||||
|
#define JANET_DEF_S(ENV, JNAME, VAL, DOC) \
|
||||||
|
janet_def_sm(ENV, JNAME, VAL, NULL, __FILE__, __LINE__)
|
||||||
|
|
||||||
/* docstring only */
|
/* docstring only */
|
||||||
#define JANET_REG_D(JNAME, CNAME) {JNAME, CNAME, CNAME##_docstring_, NULL, 0}
|
#define JANET_REG_D(JNAME, CNAME) {JNAME, CNAME, CNAME##_docstring_, NULL, 0}
|
||||||
#define JANET_FN_D(CNAME, USAGE, DOCSTRING) \
|
#define JANET_FN_D(CNAME, USAGE, DOCSTRING) \
|
||||||
static const char CNAME##_docstring_[] = USAGE "\n\n" DOCSTRING; \
|
static const char CNAME##_docstring_[] = USAGE "\n\n" DOCSTRING; \
|
||||||
Janet CNAME (int32_t argc, Janet *argv)
|
Janet CNAME (int32_t argc, Janet *argv)
|
||||||
|
#define JANET_DEF_D(ENV, JNAME, VAL, DOC) \
|
||||||
|
janet_def(ENV, JNAME, VAL, DOC)
|
||||||
|
|
||||||
/* sourcemaps and docstrings */
|
/* sourcemaps and docstrings */
|
||||||
#define JANET_REG_SD(JNAME, CNAME) {JNAME, CNAME, CNAME##_docstring_, __FILE__, CNAME##_sourceline_}
|
#define JANET_REG_SD(JNAME, CNAME) {JNAME, CNAME, CNAME##_docstring_, __FILE__, CNAME##_sourceline_}
|
||||||
@ -1785,20 +1791,27 @@ JANET_API Janet janet_resolve_core(const char *name);
|
|||||||
static int32_t CNAME##_sourceline_ = __LINE__; \
|
static int32_t CNAME##_sourceline_ = __LINE__; \
|
||||||
static const char CNAME##_docstring_[] = USAGE "\n\n" DOCSTRING; \
|
static const char CNAME##_docstring_[] = USAGE "\n\n" DOCSTRING; \
|
||||||
Janet CNAME (int32_t argc, Janet *argv)
|
Janet CNAME (int32_t argc, Janet *argv)
|
||||||
|
#define JANET_DEF_SD(ENV, JNAME, VAL, DOC) \
|
||||||
|
janet_def_sm(ENV, JNAME, VAL, DOC, __FILE__, __LINE__)
|
||||||
|
|
||||||
|
|
||||||
/* Choose defaults for source mapping and docstring based on config defs */
|
/* Choose defaults for source mapping and docstring based on config defs */
|
||||||
#if defined(JANET_NO_SOURCEMAPS) && defined(JANET_NO_DOCSTRINGS)
|
#if defined(JANET_NO_SOURCEMAPS) && defined(JANET_NO_DOCSTRINGS)
|
||||||
#define JANET_REG JANET_REG_
|
#define JANET_REG JANET_REG_
|
||||||
#define JANET_FN JANET_FN_
|
#define JANET_FN JANET_FN_
|
||||||
|
#define JANET_DEF JANET_DEF_
|
||||||
#elif defined(JANET_NO_SOURCEMAPS) && !defined(JANET_NO_DOCSTRINGS)
|
#elif defined(JANET_NO_SOURCEMAPS) && !defined(JANET_NO_DOCSTRINGS)
|
||||||
#define JANET_REG JANET_REG_D
|
#define JANET_REG JANET_REG_D
|
||||||
#define JANET_FN JANET_FN_D
|
#define JANET_FN JANET_FN_D
|
||||||
|
#define JANET_DEF JANET_DEF_D
|
||||||
#elif !defined(JANET_NO_SOURCEMAPS) && defined(JANET_NO_DOCSTRINGS)
|
#elif !defined(JANET_NO_SOURCEMAPS) && defined(JANET_NO_DOCSTRINGS)
|
||||||
#define JANET_REG JANET_REG_S
|
#define JANET_REG JANET_REG_S
|
||||||
#define JANET_FN JANET_FN_S
|
#define JANET_FN JANET_FN_S
|
||||||
|
#define JANET_DEF JANET_DEF_S
|
||||||
#elif !defined(JANET_NO_SOURCEMAPS) && !defined(JANET_NO_DOCSTRINGS)
|
#elif !defined(JANET_NO_SOURCEMAPS) && !defined(JANET_NO_DOCSTRINGS)
|
||||||
#define JANET_REG JANET_REG_SD
|
#define JANET_REG JANET_REG_SD
|
||||||
#define JANET_FN JANET_FN_SD
|
#define JANET_FN JANET_FN_SD
|
||||||
|
#define JANET_DEF JANET_DEF_SD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Define things with source mapping information */
|
/* Define things with source mapping information */
|
||||||
|
Loading…
Reference in New Issue
Block a user