mirror of
https://github.com/janet-lang/janet
synced 2025-01-26 07:06:51 +00:00
Update range checks for 64 bit integers.
This commit is contained in:
parent
6a187a384b
commit
51ff43e2f2
41
jpm
41
jpm
@ -1069,36 +1069,47 @@ usage: jpm [--key=value, --flag] ... [subcommand] [args] ...
|
|||||||
|
|
||||||
Run from a directory containing a project.janet file to perform operations
|
Run from a directory containing a project.janet file to perform operations
|
||||||
on a project, or from anywhere to do operations on the global module cache (modpath).
|
on a project, or from anywhere to do operations on the global module cache (modpath).
|
||||||
|
Commands that need write permission to the modpath are considered privileged commands - in
|
||||||
|
some environments they may require super user privileges.
|
||||||
|
Other project-level commands need to have a ./project.janet file in the current directory.
|
||||||
|
|
||||||
Subcommands are:
|
Unprivileged global subcommands:
|
||||||
build : build all artifacts
|
|
||||||
help : show this help text
|
help : show this help text
|
||||||
|
show-paths : prints the paths that will be used to install things.
|
||||||
|
quickbin entry executable : Create an executable from a janet script with a main function.
|
||||||
|
|
||||||
|
Privileged global subcommands:
|
||||||
install (repo or name)... : install artifacts. If a repo is given, install the contents of that
|
install (repo or name)... : install artifacts. If a repo is given, install the contents of that
|
||||||
git repository, assuming that the repository is a jpm project. If not, build
|
git repository, assuming that the repository is a jpm project. If not, build
|
||||||
and install the current project.
|
and install the current project.
|
||||||
uninstall (module)... : uninstall a module. If no module is given, uninstall the module
|
uninstall (module)... : uninstall a module. If no module is given, uninstall the module
|
||||||
defined by the current directory.
|
defined by the current directory.
|
||||||
show-paths : prints the paths that will be used to install things.
|
|
||||||
clean : remove any generated files or artifacts
|
|
||||||
test : run tests. Tests should be .janet files in the test/ directory relative to project.janet.
|
|
||||||
deps : install dependencies for the current project.
|
|
||||||
clear-cache : clear the git cache. Useful for updating dependencies.
|
clear-cache : clear the git cache. Useful for updating dependencies.
|
||||||
clear-manifest : clear the manifest. Useful for fixing broken installs.
|
clear-manifest : clear the manifest. Useful for fixing broken installs.
|
||||||
run rule : run a rule. Can also run custom rules added via (phony "task" [deps...] ...)
|
|
||||||
or (rule "ouput.file" [deps...] ...).
|
|
||||||
rules : list rules available with run.
|
|
||||||
rule-tree (root rule) (depth) : Print a nice tree to see what rules depend on other rules.
|
|
||||||
Optinally provide a root rule to start printing from, and a
|
|
||||||
max depth to print. Without these options, all rules will print
|
|
||||||
their full dependency tree.
|
|
||||||
update-pkgs : Update the current package listing from the remote git repository selected.
|
|
||||||
quickbin entry executable : Create an executable from a janet script with a main function.
|
|
||||||
make-lockfile (lockfile) : Create a lockfile based on repositories in the cache. The
|
make-lockfile (lockfile) : Create a lockfile based on repositories in the cache. The
|
||||||
lockfile will record the exact versions of dependencies used to ensure a reproducible
|
lockfile will record the exact versions of dependencies used to ensure a reproducible
|
||||||
build. Lockfiles are best used with applications, not libraries. The default lockfile
|
build. Lockfiles are best used with applications, not libraries. The default lockfile
|
||||||
name is lockfile.jdn.
|
name is lockfile.jdn.
|
||||||
load-lockfile (lockfile) : Install modules from a lockfile in a reproducible way. The
|
load-lockfile (lockfile) : Install modules from a lockfile in a reproducible way. The
|
||||||
default lockfile name is lockfile.jdn.
|
default lockfile name is lockfile.jdn.
|
||||||
|
update-pkgs : Update the current package listing from the remote git repository selected.
|
||||||
|
|
||||||
|
Privileged project subcommands:
|
||||||
|
deps : install dependencies for the current project.
|
||||||
|
install : install artifacts of the current project.
|
||||||
|
uninstall : uninstall the current project's artifacts.
|
||||||
|
|
||||||
|
Unprivileged project subcommands:
|
||||||
|
build : build all artifacts
|
||||||
|
clean : remove any generated files or artifacts
|
||||||
|
test : run tests. Tests should be .janet files in the test/ directory relative to project.janet.
|
||||||
|
run rule : run a rule. Can also run custom rules added via (phony "task" [deps...] ...)
|
||||||
|
or (rule "ouput.file" [deps...] ...).
|
||||||
|
rules : list rules available with run.
|
||||||
|
rule-tree (root rule) (depth) : Print a nice tree to see what rules depend on other rules.
|
||||||
|
Optionally provide a root rule to start printing from, and a
|
||||||
|
max depth to print. Without these options, all rules will print
|
||||||
|
their full dependency tree.
|
||||||
debug-repl : Run a repl in the context of the current project.janet file. This lets you run rules and
|
debug-repl : Run a repl in the context of the current project.janet file. This lets you run rules and
|
||||||
otherwise debug the current project.janet file.
|
otherwise debug the current project.janet file.
|
||||||
|
|
||||||
|
@ -574,8 +574,12 @@ int janet_checksize(Janet x) {
|
|||||||
if (!janet_checktype(x, JANET_NUMBER))
|
if (!janet_checktype(x, JANET_NUMBER))
|
||||||
return 0;
|
return 0;
|
||||||
double dval = janet_unwrap_number(x);
|
double dval = janet_unwrap_number(x);
|
||||||
return dval == (double)((size_t) dval) &&
|
if (dval != (double)((size_t) dval)) return 0;
|
||||||
dval <= SIZE_MAX;
|
if (SIZE_MAX > JANET_INTMAX_INT64) {
|
||||||
|
return dval <= JANET_INTMAX_INT64;
|
||||||
|
} else {
|
||||||
|
return dval <= SIZE_MAX;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JanetTable *janet_get_core_table(const char *name) {
|
JanetTable *janet_get_core_table(const char *name) {
|
||||||
|
@ -542,6 +542,12 @@ JANET_API Janet janet_wrap_integer(int32_t x);
|
|||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
/* Limits for converting doubles to 64 bit integers */
|
||||||
|
#define JANET_INTMAX_DOUBLE 9007199254740991.0
|
||||||
|
#define JANET_INTMIN_DOUBLE (-9007199254740991.0)
|
||||||
|
#define JANET_INTMAX_INT64 9007199254740991
|
||||||
|
#define JANET_INTMIN_INT64 (-9007199254740991)
|
||||||
|
|
||||||
#define janet_u64(x) ((x).u64)
|
#define janet_u64(x) ((x).u64)
|
||||||
|
|
||||||
#define JANET_NANBOX_TAGBITS 0xFFFF800000000000llu
|
#define JANET_NANBOX_TAGBITS 0xFFFF800000000000llu
|
||||||
@ -706,7 +712,7 @@ JANET_API int janet_checkint64(Janet x);
|
|||||||
JANET_API int janet_checksize(Janet x);
|
JANET_API int janet_checksize(Janet x);
|
||||||
JANET_API JanetAbstract janet_checkabstract(Janet x, const JanetAbstractType *at);
|
JANET_API JanetAbstract janet_checkabstract(Janet x, const JanetAbstractType *at);
|
||||||
#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
|
#define janet_checkintrange(x) ((x) >= INT32_MIN && (x) <= INT32_MAX && (x) == (int32_t)(x))
|
||||||
#define janet_checkint64range(x) ((x) >= INT64_MIN && (x) <= INT64_MAX && (x) == (int64_t)(x))
|
#define janet_checkint64range(x) ((x) >= JANET_INTMIN_DOUBLE && (x) <= JANET_INTMAX_DOUBLE && (x) == (int64_t)(x))
|
||||||
#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
|
#define janet_unwrap_integer(x) ((int32_t) janet_unwrap_number(x))
|
||||||
#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
|
#define janet_wrap_integer(x) janet_wrap_number((int32_t)(x))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user