mirror of
https://github.com/janet-lang/janet
synced 2024-11-25 01:37:19 +00:00
Update integer limits and printing.
This commit is contained in:
parent
6ea530cc48
commit
7b31a87b3c
@ -2,6 +2,7 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## Unreleased - ???
|
## Unreleased - ???
|
||||||
|
- Add `math/int-min`, `math/int-max`, `math/int32-min`, and `math/int32-max` for getting integer limits.
|
||||||
- The gc interval is now autotuned, to prevent very bad gc behavior.
|
- The gc interval is now autotuned, to prevent very bad gc behavior.
|
||||||
- Improvements to the bytecode compiler, Janet will now generate more efficient bytecode.
|
- Improvements to the bytecode compiler, Janet will now generate more efficient bytecode.
|
||||||
- Add `peg/find`, `peg/find-all`, `peg/replace`, and `peg/replace-all`
|
- Add `peg/find`, `peg/find-all`, `peg/replace`, and `peg/replace-all`
|
||||||
|
@ -20,18 +20,18 @@
|
|||||||
* IN THE SOFTWARE.
|
* IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
#ifndef JANET_AMALG
|
#ifndef JANET_AMALG
|
||||||
#include "features.h"
|
#include "features.h"
|
||||||
#include <janet.h>
|
#include <janet.h>
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
/* Conditional compilation */
|
/* Conditional compilation */
|
||||||
#ifdef JANET_INT_TYPES
|
#ifdef JANET_INT_TYPES
|
||||||
|
|
||||||
|
@ -499,6 +499,14 @@ void janet_lib_math(JanetTable *env) {
|
|||||||
JDOC("The number representing positive infinity"));
|
JDOC("The number representing positive infinity"));
|
||||||
janet_def(env, "math/-inf", janet_wrap_number(-INFINITY),
|
janet_def(env, "math/-inf", janet_wrap_number(-INFINITY),
|
||||||
JDOC("The number representing negative infinity"));
|
JDOC("The number representing negative infinity"));
|
||||||
|
janet_def(env, "math/int32-min", janet_wrap_number(INT32_MIN),
|
||||||
|
JDOC("The maximum contiguous integer representable by a 32 bit signed integer"));
|
||||||
|
janet_def(env, "math/int32-max", janet_wrap_number(INT32_MAX),
|
||||||
|
JDOC("The minimum contiguous integer represtenable by a 32 bit signed integer"));
|
||||||
|
janet_def(env, "math/int-min", janet_wrap_number(JANET_INTMIN_DOUBLE),
|
||||||
|
JDOC("The maximum contiguous integer representable by a double (2^53)"));
|
||||||
|
janet_def(env, "math/int-max", janet_wrap_number(JANET_INTMAX_DOUBLE),
|
||||||
|
JDOC("The minimum contiguous integer represtenable by a double (-(2^53))"));
|
||||||
#ifdef NAN
|
#ifdef NAN
|
||||||
janet_def(env, "math/nan", janet_wrap_number(NAN),
|
janet_def(env, "math/nan", janet_wrap_number(NAN),
|
||||||
#else
|
#else
|
||||||
|
@ -39,11 +39,9 @@
|
|||||||
|
|
||||||
static void number_to_string_b(JanetBuffer *buffer, double x) {
|
static void number_to_string_b(JanetBuffer *buffer, double x) {
|
||||||
janet_buffer_ensure(buffer, buffer->count + BUFSIZE, 2);
|
janet_buffer_ensure(buffer, buffer->count + BUFSIZE, 2);
|
||||||
/* Use int32_t range for valid integers because that is the
|
|
||||||
* range most integer-expecting functions in the C api use. */
|
|
||||||
const char *fmt = (x == floor(x) &&
|
const char *fmt = (x == floor(x) &&
|
||||||
x <= ((double) INT32_MAX) &&
|
x <= JANET_INTMAX_DOUBLE &&
|
||||||
x >= ((double) INT32_MIN)) ? "%.0f" : "%g";
|
x >= JANET_INTMIN_DOUBLE) ? "%.0f" : "%g";
|
||||||
int count = snprintf((char *) buffer->data + buffer->count, BUFSIZE, fmt, x);
|
int count = snprintf((char *) buffer->data + buffer->count, BUFSIZE, fmt, x);
|
||||||
buffer->count += count;
|
buffer->count += count;
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,11 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#if !defined(JANET_REDUCED_OS) || !defined(JANET_SINGLE_THREADED)
|
||||||
|
#include <time.h>
|
||||||
|
#define JANET_GETTIME
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Handle runtime errors */
|
/* Handle runtime errors */
|
||||||
#ifndef JANET_EXIT
|
#ifndef JANET_EXIT
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -98,12 +103,7 @@ void janet_core_cfuns(JanetTable *env, const char *regprefix, const JanetReg *cf
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Clock gettime */
|
/* Clock gettime */
|
||||||
#if !defined(JANET_REDUCED_OS) || !defined(JANET_SINGLE_THREADED)
|
#ifdef JANET_GETTIME
|
||||||
#include <time.h>
|
|
||||||
#ifndef JANET_WINDOWS
|
|
||||||
#include <sys/time.h>
|
|
||||||
#endif
|
|
||||||
#define JANET_GETTIME
|
|
||||||
int janet_gettime(struct timespec *spec);
|
int janet_gettime(struct timespec *spec);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -128,10 +128,10 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Limits for converting doubles to 64 bit integers */
|
/* Limits for converting doubles to 64 bit integers */
|
||||||
#define JANET_INTMAX_DOUBLE 9007199254740991.0
|
#define JANET_INTMAX_DOUBLE 9007199254740992.0
|
||||||
#define JANET_INTMIN_DOUBLE (-9007199254740991.0)
|
#define JANET_INTMIN_DOUBLE (-9007199254740992.0)
|
||||||
#define JANET_INTMAX_INT64 9007199254740991
|
#define JANET_INTMAX_INT64 9007199254740992
|
||||||
#define JANET_INTMIN_INT64 (-9007199254740991)
|
#define JANET_INTMIN_INT64 (-9007199254740992)
|
||||||
|
|
||||||
/* Check emscripten */
|
/* Check emscripten */
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
|
Loading…
Reference in New Issue
Block a user