1
0
mirror of https://github.com/janet-lang/janet synced 2025-11-23 18:54:50 +00:00

Compare commits

..

7 Commits

Author SHA1 Message Date
Calvin Rose
4835ecb950 Work on making range take non-integer values. 2024-07-11 08:05:52 -05:00
Calvin Rose
0f4ecd93ab Fix #1469 2024-06-26 08:54:26 -05:00
Calvin Rose
a5d6b22838 Check for __GLIBC__ instead of _GNU_SOURCE
musl doesn't obey this behavior.
2024-06-21 17:17:22 -05:00
Calvin Rose
fda0a081f5 Fix quoting for import. 2024-06-16 10:57:14 -05:00
Calvin Rose
94b7a69741 More fixes for patch release. 2024-06-16 10:22:49 -05:00
Calvin Rose
6518257129 Merge pull request #1460 from pnelson/fix-typos
Fix typos
2024-06-16 08:21:52 -07:00
Philip Nelson
0b51ab157d Fix typos 2024-06-16 06:59:27 -07:00
23 changed files with 114 additions and 102 deletions

View File

@@ -1,7 +1,7 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## 1.35.1 - 2024-06-16 ## 1.35.2 - 2024-06-16
- Fix some documentation typos. - Fix some documentation typos.
- Allow using `:only` in import without quoting. - Allow using `:only` in import without quoting.
@@ -118,7 +118,7 @@ All notable changes to this project will be documented in this file.
See http://no-color.org/ See http://no-color.org/
- Disallow using `(splice x)` in contexts where it doesn't make sense rather than silently coercing to `x`. - Disallow using `(splice x)` in contexts where it doesn't make sense rather than silently coercing to `x`.
Instead, raise a compiler error. Instead, raise a compiler error.
- Change the names of `:user8` and `:user9` sigals to `:interrupt` and `:await` - Change the names of `:user8` and `:user9` signals to `:interrupt` and `:await`
- Change the names of `:user8` and `:user9` fiber statuses to `:interrupted` and `:suspended`. - Change the names of `:user8` and `:user9` fiber statuses to `:interrupted` and `:suspended`.
- Add `ev/all-tasks` to see all currently suspended fibers. - Add `ev/all-tasks` to see all currently suspended fibers.
- Add `keep-syntax` and `keep-syntax!` functions to make writing macros easier. - Add `keep-syntax` and `keep-syntax!` functions to make writing macros easier.
@@ -289,7 +289,7 @@ All notable changes to this project will be documented in this file.
- Add the ability to close channels with `ev/chan-close` (or `:close`). - Add the ability to close channels with `ev/chan-close` (or `:close`).
- Add threaded channels with `ev/thread-chan`. - Add threaded channels with `ev/thread-chan`.
- Add `JANET_FN` and `JANET_REG` macros to more easily define C functions that export their source mapping information. - Add `JANET_FN` and `JANET_REG` macros to more easily define C functions that export their source mapping information.
- Add `janet_interpreter_interupt` and `janet_loop1_interrupt` to interrupt the interpreter while running. - Add `janet_interpreter_interrupt` and `janet_loop1_interrupt` to interrupt the interpreter while running.
- Add `table/clear` - Add `table/clear`
- Add build option to disable the threading library without disabling all threads. - Add build option to disable the threading library without disabling all threads.
- Remove JPM from the main Janet distribution. Instead, JPM must be installed - Remove JPM from the main Janet distribution. Instead, JPM must be installed
@@ -343,7 +343,7 @@ saving and restoring the entire VM state.
- Sort keys in pretty printing output. - Sort keys in pretty printing output.
## 1.15.3 - 2021-02-28 ## 1.15.3 - 2021-02-28
- Fix a fiber bug that occured in deeply nested fibers - Fix a fiber bug that occurred in deeply nested fibers
- Add `unref` combinator to pegs. - Add `unref` combinator to pegs.
- Small docstring changes. - Small docstring changes.
@@ -493,13 +493,13 @@ saving and restoring the entire VM state.
- Add `symbol/slice` - Add `symbol/slice`
- Add `keyword/slice` - Add `keyword/slice`
- Allow cross compilation with Makefile. - Allow cross compilation with Makefile.
- Change `compare-primitve` to `cmp` and make it more efficient. - Change `compare-primitive` to `cmp` and make it more efficient.
- Add `reverse!` for reversing an array or buffer in place. - Add `reverse!` for reversing an array or buffer in place.
- `janet_dobytes` and `janet_dostring` return parse errors in \*out - `janet_dobytes` and `janet_dostring` return parse errors in \*out
- Add `repeat` macro for iterating something n times. - Add `repeat` macro for iterating something n times.
- Add `eachy` (each yield) macro for iterating a fiber. - Add `eachy` (each yield) macro for iterating a fiber.
- Fix `:generate` verb in loop macro to accept non symbols as bindings. - Fix `:generate` verb in loop macro to accept non symbols as bindings.
- Add `:h`, `:h+`, and `:h*` in `default-peg-grammar` for hexidecimal digits. - Add `:h`, `:h+`, and `:h*` in `default-peg-grammar` for hexadecimal digits.
- Fix `%j` formatter to print numbers precisely (using the `%.17g` format string to printf). - Fix `%j` formatter to print numbers precisely (using the `%.17g` format string to printf).
## 1.10.1 - 2020-06-18 ## 1.10.1 - 2020-06-18

View File

@@ -20,7 +20,7 @@
project('janet', 'c', project('janet', 'c',
default_options : ['c_std=c99', 'build.c_std=c99', 'b_lundef=false', 'default_library=both'], default_options : ['c_std=c99', 'build.c_std=c99', 'b_lundef=false', 'default_library=both'],
version : '1.35.1') version : '1.35.2')
# Global settings # Global settings
janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet') janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet')

View File

@@ -116,7 +116,7 @@
(defn nil? "Check if x is nil." [x] (= x nil)) (defn nil? "Check if x is nil." [x] (= x nil))
(defn empty? "Check if xs is empty." [xs] (= nil (next xs nil))) (defn empty? "Check if xs is empty." [xs] (= nil (next xs nil)))
# For macros, we define an imcomplete odd? function that will be overriden. # For macros, we define an incomplete odd? function that will be overridden.
(defn odd? [x] (= 1 (mod x 2))) (defn odd? [x] (= 1 (mod x 2)))
(def- non-atomic-types (def- non-atomic-types
@@ -153,6 +153,51 @@
,v ,v
(,error ,(if err err (string/format "assert failure in %j" x)))))) (,error ,(if err err (string/format "assert failure in %j" x))))))
(defmacro defdyn
``Define an alias for a keyword that is used as a dynamic binding. The
alias is a normal, lexically scoped binding that can be used instead of
a keyword to prevent typos. `defdyn` does not set dynamic bindings or otherwise
replace `dyn` and `setdyn`. The alias _must_ start and end with the `*` character, usually
called "earmuffs".``
[alias & more]
(assert (symbol? alias) "alias must be a symbol")
(assert (> (length alias) 2) "name must have leading and trailing '*' characters")
(assert (= 42 (get alias 0) (get alias (- (length alias) 1))) "name must have leading and trailing '*' characters")
(def prefix (dyn :defdyn-prefix))
(def kw (keyword prefix (slice alias 1 -2)))
~(def ,alias :dyn ,;more ,kw))
(defdyn *macro-form*
"Inside a macro, is bound to the source form that invoked the macro")
(defdyn *lint-error*
"The current lint error level. The error level is the lint level at which compilation will exit with an error and not continue.")
(defdyn *lint-warn*
"The current lint warning level. The warning level is the lint level at which and error will be printed but compilation will continue as normal.")
(defdyn *lint-levels*
"A table of keyword alias to numbers denoting a lint level. Can be used to provided custom aliases for numeric lint levels.")
(defdyn *macro-lints*
``Bound to an array of lint messages that will be reported by the compiler inside a macro.
To indicate an error or warning, a macro author should use `maclintf`.``)
(defn maclintf
``When inside a macro, call this function to add a linter warning. Takes
a `fmt` argument like `string/format`, which is used to format the message.``
[level fmt & args]
(def lints (dyn *macro-lints*))
(if lints
(do
(def form (dyn *macro-form*))
(def [l c] (if (tuple? form) (tuple/sourcemap form) [nil nil]))
(def l (if (not= -1 l) l))
(def c (if (not= -1 c) c))
(def msg (string/format fmt ;args))
(array/push lints [level l c msg])))
nil)
(defn errorf (defn errorf
"A combination of `error` and `string/format`. Equivalent to `(error (string/format fmt ;args))`." "A combination of `error` and `string/format`. Equivalent to `(error (string/format fmt ;args))`."
[fmt & args] [fmt & args]
@@ -531,6 +576,11 @@
[x ds & body] [x ds & body]
(each-template x ds :each body)) (each-template x ds :each body))
(defn- check-empty-body
[body]
(if (= (length body) 0)
(maclintf :normal "empty loop body")))
(defmacro loop (defmacro loop
``` ```
A general purpose loop macro. This macro is similar to the Common Lisp loop A general purpose loop macro. This macro is similar to the Common Lisp loop
@@ -602,6 +652,7 @@
The `loop` macro always evaluates to nil. The `loop` macro always evaluates to nil.
``` ```
[head & body] [head & body]
(check-empty-body body)
(loop1 body head 0)) (loop1 body head 0))
(defmacro seq (defmacro seq
@@ -609,6 +660,7 @@
See `loop` for details.`` See `loop` for details.``
[head & body] [head & body]
(def $accum (gensym)) (def $accum (gensym))
(check-empty-body body)
~(do (def ,$accum @[]) (loop ,head (,array/push ,$accum (do ,;body))) ,$accum)) ~(do (def ,$accum @[]) (loop ,head (,array/push ,$accum (do ,;body))) ,$accum))
(defmacro catseq (defmacro catseq
@@ -616,6 +668,7 @@
See `loop` for details.`` See `loop` for details.``
[head & body] [head & body]
(def $accum (gensym)) (def $accum (gensym))
(check-empty-body body)
~(do (def ,$accum @[]) (loop ,head (,array/concat ,$accum (do ,;body))) ,$accum)) ~(do (def ,$accum @[]) (loop ,head (,array/concat ,$accum (do ,;body))) ,$accum))
(defmacro tabseq (defmacro tabseq
@@ -629,6 +682,7 @@
``Create a generator expression using the `loop` syntax. Returns a fiber ``Create a generator expression using the `loop` syntax. Returns a fiber
that yields all values inside the loop in order. See `loop` for details.`` that yields all values inside the loop in order. See `loop` for details.``
[head & body] [head & body]
(check-empty-body body)
~(,fiber/new (fn :generate [] (loop ,head (yield (do ,;body)))) :yi)) ~(,fiber/new (fn :generate [] (loop ,head (yield (do ,;body)))) :yi))
(defmacro coro (defmacro coro
@@ -1207,19 +1261,6 @@
(array/push parts (tuple apply f $args))) (array/push parts (tuple apply f $args)))
(tuple 'fn :juxt (tuple '& $args) (tuple/slice parts 0))) (tuple 'fn :juxt (tuple '& $args) (tuple/slice parts 0)))
(defmacro defdyn
``Define an alias for a keyword that is used as a dynamic binding. The
alias is a normal, lexically scoped binding that can be used instead of
a keyword to prevent typos. `defdyn` does not set dynamic bindings or otherwise
replace `dyn` and `setdyn`. The alias _must_ start and end with the `*` character, usually
called "earmuffs".``
[alias & more]
(assert (symbol? alias) "alias must be a symbol")
(assert (and (> (length alias) 2) (= 42 (first alias) (last alias))) "name must have leading and trailing '*' characters")
(def prefix (dyn :defdyn-prefix))
(def kw (keyword prefix (slice alias 1 -2)))
~(def ,alias :dyn ,;more ,kw))
(defn has-key? (defn has-key?
"Check if a data structure `ds` contains the key `key`." "Check if a data structure `ds` contains the key `key`."
[ds key] [ds key]
@@ -1240,18 +1281,6 @@
(defdyn *exit-value* "Set the return value from `run-context` upon an exit. By default, `run-context` will return nil.") (defdyn *exit-value* "Set the return value from `run-context` upon an exit. By default, `run-context` will return nil.")
(defdyn *task-id* "When spawning a thread or fiber, the task-id can be assigned for concurrency control.") (defdyn *task-id* "When spawning a thread or fiber, the task-id can be assigned for concurrency control.")
(defdyn *macro-form*
"Inside a macro, is bound to the source form that invoked the macro")
(defdyn *lint-error*
"The current lint error level. The error level is the lint level at which compilation will exit with an error and not continue.")
(defdyn *lint-warn*
"The current lint warning level. The warning level is the lint level at which and error will be printed but compilation will continue as normal.")
(defdyn *lint-levels*
"A table of keyword alias to numbers denoting a lint level. Can be used to provided custom aliases for numeric lint levels.")
(defdyn *current-file* (defdyn *current-file*
"Bound to the name of the currently compiling file.") "Bound to the name of the currently compiling file.")
@@ -2035,24 +2064,6 @@
### ###
### ###
(defdyn *macro-lints*
``Bound to an array of lint messages that will be reported by the compiler inside a macro.
To indicate an error or warning, a macro author should use `maclintf`.``)
(defn maclintf
``When inside a macro, call this function to add a linter warning. Takes
a `fmt` argument like `string/format`, which is used to format the message.``
[level fmt & args]
(def lints (dyn *macro-lints*))
(when lints
(def form (dyn *macro-form*))
(def [l c] (if (tuple? form) (tuple/sourcemap form) [nil nil]))
(def l (if-not (= -1 l) l))
(def c (if-not (= -1 c) c))
(def msg (string/format fmt ;args))
(array/push lints [level l c msg]))
nil)
(defn macex1 (defn macex1
``Expand macros in a form, but do not recursively expand macros. ``Expand macros in a form, but do not recursively expand macros.
See `macex` docs for info on `on-binding`.`` See `macex` docs for info on `on-binding`.``
@@ -3077,7 +3088,7 @@
current environment.`` current environment.``
[path & args] [path & args]
(def ps (partition 2 args)) (def ps (partition 2 args))
(def argm (mapcat (fn [[k v]] [k (if (= k :as) (string v) v)]) ps)) (def argm (mapcat (fn [[k v]] [k (case k :as (string v) :only ~(quote ,v) v)]) ps))
(tuple import* (string path) ;argm)) (tuple import* (string path) ;argm))
(defmacro use (defmacro use
@@ -3847,7 +3858,7 @@
(string/replace-all "-" "_" name)) (string/replace-all "-" "_" name))
(defn ffi/context (defn ffi/context
"Set the path of the dynamic library to implictly bind, as well "Set the path of the dynamic library to implicitly bind, as well
as other global state for ease of creating native bindings." as other global state for ease of creating native bindings."
[&opt native-path &named map-symbols lazy] [&opt native-path &named map-symbols lazy]
(default map-symbols default-mangle) (default map-symbols default-mangle)
@@ -4179,7 +4190,7 @@
(not (not (os/stat (bundle-dir bundle-name) :mode)))) (not (not (os/stat (bundle-dir bundle-name) :mode))))
(defn bundle/install (defn bundle/install
"Install a bundle from the local filesystem. The name of the bundle will be infered from the bundle, or passed as a parameter :name in `config`." "Install a bundle from the local filesystem. The name of the bundle will be inferred from the bundle, or passed as a parameter :name in `config`."
[path &keys config] [path &keys config]
(def path (bundle-rpath path)) (def path (bundle-rpath path))
(def clean (get config :clean)) (def clean (get config :clean))

View File

@@ -5,9 +5,9 @@
#define JANET_VERSION_MAJOR 1 #define JANET_VERSION_MAJOR 1
#define JANET_VERSION_MINOR 35 #define JANET_VERSION_MINOR 35
#define JANET_VERSION_PATCH 1 #define JANET_VERSION_PATCH 2
#define JANET_VERSION_EXTRA "" #define JANET_VERSION_EXTRA ""
#define JANET_VERSION "1.35.1" #define JANET_VERSION "1.35.2"
/* #define JANET_BUILD "local" */ /* #define JANET_BUILD "local" */

View File

@@ -262,7 +262,7 @@ void janetc_popscope(JanetCompiler *c);
void janetc_popscope_keepslot(JanetCompiler *c, JanetSlot retslot); void janetc_popscope_keepslot(JanetCompiler *c, JanetSlot retslot);
JanetFuncDef *janetc_pop_funcdef(JanetCompiler *c); JanetFuncDef *janetc_pop_funcdef(JanetCompiler *c);
/* Create a destory slots */ /* Create a destroy slot */
JanetSlot janetc_cslot(Janet x); JanetSlot janetc_cslot(Janet x);
/* Search for a symbol */ /* Search for a symbol */

View File

@@ -432,27 +432,28 @@ JANET_CORE_FN(janet_core_range,
"With one argument, returns a range [0, end). With two arguments, returns " "With one argument, returns a range [0, end). With two arguments, returns "
"a range [start, end). With three, returns a range with optional step size.") { "a range [start, end). With three, returns a range with optional step size.") {
janet_arity(argc, 1, 3); janet_arity(argc, 1, 3);
int32_t start = 0, stop = 0, step = 1, count = 0; double start = 0, stop = 0, step = 1, count = 0;
if (argc == 3) { if (argc == 3) {
start = janet_getinteger(argv, 0); start = janet_getnumber(argv, 0);
stop = janet_getinteger(argv, 1); stop = janet_getnumber(argv, 1);
step = janet_getinteger(argv, 2); step = janet_getnumber(argv, 2);
count = (step > 0) ? (stop - start - 1) / step + 1 : count = (step > 0) ? (stop - start) / step :
((step < 0) ? (stop - start + 1) / step + 1 : 0); ((step < 0) ? (stop - start) / step : 0);
} else if (argc == 2) { } else if (argc == 2) {
start = janet_getinteger(argv, 0); start = janet_getnumber(argv, 0);
stop = janet_getinteger(argv, 1); stop = janet_getnumber(argv, 1);
count = stop - start; count = stop - start;
} else { } else {
stop = janet_getinteger(argv, 0); stop = janet_getnumber(argv, 0);
count = stop; count = stop;
} }
count = (count > 0) ? count : 0; count = (count > 0) ? count : 0;
JanetArray *array = janet_array(count); int32_t int_count = ceil(count);
for (int32_t i = 0; i < count; i++) { JanetArray *array = janet_array(int_count);
for (int32_t i = 0; i < int_count; i++) {
array->data[i] = janet_wrap_number(start + i * step); array->data[i] = janet_wrap_number(start + i * step);
} }
array->count = count; array->count = int_count;
return janet_wrap_array(array); return janet_wrap_array(array);
} }
@@ -976,7 +977,7 @@ static void make_apply(JanetTable *env) {
/* Push the array */ /* Push the array */
S(JOP_PUSH_ARRAY, 5), S(JOP_PUSH_ARRAY, 5),
/* Call the funciton */ /* Call the function */
S(JOP_TAILCALL, 0) S(JOP_TAILCALL, 0)
}; };
janet_quick_asm(env, JANET_FUN_APPLY | JANET_FUNCDEF_FLAG_VARARG, janet_quick_asm(env, JANET_FUN_APPLY | JANET_FUNCDEF_FLAG_VARARG,

View File

@@ -102,7 +102,7 @@ void janet_stacktrace(JanetFiber *fiber, Janet err) {
} }
/* Error reporting. This can be emulated from within Janet, but for /* Error reporting. This can be emulated from within Janet, but for
* consitency with the top level code it is defined once. */ * consistency with the top level code it is defined once. */
void janet_stacktrace_ext(JanetFiber *fiber, Janet err, const char *prefix) { void janet_stacktrace_ext(JanetFiber *fiber, Janet err, const char *prefix) {
int32_t fi; int32_t fi;

View File

@@ -433,7 +433,7 @@ static void janet_stream_marshal(void *p, JanetMarshalContext *ctx) {
} }
janet_marshal_int64(ctx, (int64_t)(duph)); janet_marshal_int64(ctx, (int64_t)(duph));
#else #else
/* Marshal after dup becuse it is easier than maintaining our own ref counting. */ /* Marshal after dup because it is easier than maintaining our own ref counting. */
int duph = dup(s->handle); int duph = dup(s->handle);
if (duph < 0) janet_panicf("failed to duplicate stream handle: %V", janet_ev_lasterr()); if (duph < 0) janet_panicf("failed to duplicate stream handle: %V", janet_ev_lasterr());
janet_marshal_int(ctx, (int32_t)(duph)); janet_marshal_int(ctx, (int32_t)(duph));
@@ -595,7 +595,7 @@ void janet_ev_deinit_common(void) {
/* Shorthand to yield to event loop */ /* Shorthand to yield to event loop */
void janet_await(void) { void janet_await(void) {
/* Store the fiber in a gobal table */ /* Store the fiber in a global table */
janet_signalv(JANET_SIGNAL_EVENT, janet_wrap_nil()); janet_signalv(JANET_SIGNAL_EVENT, janet_wrap_nil());
} }
@@ -1477,7 +1477,7 @@ static void janet_register_stream(JanetStream *stream) {
void janet_loop1_impl(int has_timeout, JanetTimestamp to) { void janet_loop1_impl(int has_timeout, JanetTimestamp to) {
ULONG_PTR completionKey = 0; ULONG_PTR completionKey = 0;
DWORD num_bytes_transfered = 0; DWORD num_bytes_transferred = 0;
LPOVERLAPPED overlapped = NULL; LPOVERLAPPED overlapped = NULL;
/* Calculate how long to wait before timeout */ /* Calculate how long to wait before timeout */
@@ -1492,7 +1492,7 @@ void janet_loop1_impl(int has_timeout, JanetTimestamp to) {
} else { } else {
waittime = INFINITE; waittime = INFINITE;
} }
BOOL result = GetQueuedCompletionStatus(janet_vm.iocp, &num_bytes_transfered, &completionKey, &overlapped, (DWORD) waittime); BOOL result = GetQueuedCompletionStatus(janet_vm.iocp, &num_bytes_transferred, &completionKey, &overlapped, (DWORD) waittime);
if (result || overlapped) { if (result || overlapped) {
if (0 == completionKey) { if (0 == completionKey) {
@@ -1515,7 +1515,7 @@ void janet_loop1_impl(int has_timeout, JanetTimestamp to) {
if (fiber != NULL) { if (fiber != NULL) {
fiber->flags &= ~JANET_FIBER_EV_FLAG_IN_FLIGHT; fiber->flags &= ~JANET_FIBER_EV_FLAG_IN_FLIGHT;
/* System is done with this, we can reused this data */ /* System is done with this, we can reused this data */
overlapped->InternalHigh = (ULONG_PTR) num_bytes_transfered; overlapped->InternalHigh = (ULONG_PTR) num_bytes_transferred;
fiber->ev_callback(fiber, result ? JANET_ASYNC_EVENT_COMPLETE : JANET_ASYNC_EVENT_FAILED); fiber->ev_callback(fiber, result ? JANET_ASYNC_EVENT_COMPLETE : JANET_ASYNC_EVENT_FAILED);
} else { } else {
janet_free((void *) overlapped); janet_free((void *) overlapped);
@@ -2832,7 +2832,7 @@ static JanetEVGenericMessage janet_go_thread_subr(JanetEVGenericMessage args) {
janet_gcroot(janet_wrap_table(janet_vm.abstract_registry)); janet_gcroot(janet_wrap_table(janet_vm.abstract_registry));
} }
/* Get supervsior */ /* Get supervisor */
if (flags & JANET_THREAD_SUPERVISOR_FLAG) { if (flags & JANET_THREAD_SUPERVISOR_FLAG) {
Janet sup = Janet sup =
janet_unmarshal(nextbytes, endbytes - nextbytes, janet_unmarshal(nextbytes, endbytes - nextbytes,

View File

@@ -475,7 +475,7 @@ JANET_CORE_FN(cfun_ffi_align,
static void *janet_ffi_getpointer(const Janet *argv, int32_t n) { static void *janet_ffi_getpointer(const Janet *argv, int32_t n) {
switch (janet_type(argv[n])) { switch (janet_type(argv[n])) {
default: default:
janet_panicf("bad slot #%d, expected ffi pointer convertable type, got %v", n, argv[n]); janet_panicf("bad slot #%d, expected ffi pointer convertible type, got %v", n, argv[n]);
case JANET_POINTER: case JANET_POINTER:
case JANET_STRING: case JANET_STRING:
case JANET_KEYWORD: case JANET_KEYWORD:

View File

@@ -64,7 +64,7 @@ enum JanetMemoryType {
}; };
/* To allocate collectable memory, one must call janet_alloc, initialize the memory, /* To allocate collectable memory, one must call janet_alloc, initialize the memory,
* and then call when janet_enablegc when it is initailize and reachable by the gc (on the JANET stack) */ * and then call when janet_enablegc when it is initialized and reachable by the gc (on the JANET stack) */
void *janet_gcalloc(enum JanetMemoryType type, size_t size); void *janet_gcalloc(enum JanetMemoryType type, size_t size);
#endif #endif

View File

@@ -294,7 +294,7 @@ int janet_file_close(JanetFile *file) {
if (!(file->flags & (JANET_FILE_NOT_CLOSEABLE | JANET_FILE_CLOSED))) { if (!(file->flags & (JANET_FILE_NOT_CLOSEABLE | JANET_FILE_CLOSED))) {
ret = fclose(file->file); ret = fclose(file->file);
file->flags |= JANET_FILE_CLOSED; file->flags |= JANET_FILE_CLOSED;
file->file = NULL; /* NULL derefence is easier to debug then other problems */ file->file = NULL; /* NULL dereference is easier to debug then other problems */
return ret; return ret;
} }
return 0; return 0;

View File

@@ -325,7 +325,7 @@ JANET_NO_RETURN static void janet_sched_accept(JanetStream *stream, JanetFunctio
#endif #endif
/* Adress info */ /* Address info */
static int janet_get_sockettype(Janet *argv, int32_t argc, int32_t n) { static int janet_get_sockettype(Janet *argv, int32_t argc, int32_t n) {
JanetKeyword stype = janet_optkeyword(argv, argc, n, NULL); JanetKeyword stype = janet_optkeyword(argv, argc, n, NULL);

View File

@@ -1413,7 +1413,7 @@ JANET_CORE_FN(os_spawn,
JANET_CORE_FN(os_posix_exec, JANET_CORE_FN(os_posix_exec,
"(os/posix-exec args &opt flags env)", "(os/posix-exec args &opt flags env)",
"Use the execvpe or execve system calls to replace the current process with an interface similar to os/execute. " "Use the execvpe or execve system calls to replace the current process with an interface similar to os/execute. "
"Hoever, instead of creating a subprocess, the current process is replaced. Is not supported on windows, and " "However, instead of creating a subprocess, the current process is replaced. Is not supported on windows, and "
"does not allow redirection of stdio.") { "does not allow redirection of stdio.") {
return os_execute_impl(argc, argv, JANET_EXECUTE_EXEC); return os_execute_impl(argc, argv, JANET_EXECUTE_EXEC);
} }
@@ -2668,7 +2668,7 @@ JANET_CORE_FN(os_open,
} else if (write_flag && !read_flag) { } else if (write_flag && !read_flag) {
open_flags |= O_WRONLY; open_flags |= O_WRONLY;
} else { } else {
open_flags = O_RDWR; open_flags |= O_RDWR;
} }
do { do {

View File

@@ -134,7 +134,7 @@ static LineCol get_linecol_from_position(PegState *s, int32_t position) {
* a newline character is consider to be on the same line as the character before * a newline character is consider to be on the same line as the character before
* (\n is line terminator, not line separator). * (\n is line terminator, not line separator).
* - in the not-found case, we still want to find the greatest-indexed newline that * - in the not-found case, we still want to find the greatest-indexed newline that
* is before position. we use that to calcuate the line and column. * is before position. we use that to calculate the line and column.
* - in the case that lo = 0 and s->linemap[0] is still greater than position, we * - in the case that lo = 0 and s->linemap[0] is still greater than position, we
* are on the first line and our column is position + 1. */ * are on the first line and our column is position + 1. */
int32_t hi = s->linemaplen; /* hi is greater than the actual line */ int32_t hi = s->linemaplen; /* hi is greater than the actual line */
@@ -667,11 +667,11 @@ tail:
case RULE_READINT: { case RULE_READINT: {
uint32_t tag = rule[2]; uint32_t tag = rule[2];
uint32_t signedness = rule[1] & 0x10; uint32_t signedness = rule[1] & 0x10;
uint32_t endianess = rule[1] & 0x20; uint32_t endianness = rule[1] & 0x20;
int width = (int)(rule[1] & 0xF); int width = (int)(rule[1] & 0xF);
if (text + width > s->text_end) return NULL; if (text + width > s->text_end) return NULL;
uint64_t accum = 0; uint64_t accum = 0;
if (endianess) { if (endianness) {
/* BE */ /* BE */
for (int i = 0; i < width; i++) accum = (accum << 8) | text[i]; for (int i = 0; i < width; i++) accum = (accum << 8) | text[i];
} else { } else {
@@ -1628,7 +1628,7 @@ static void *peg_unmarshal(JanetMarshalContext *ctx) {
i += 2; i += 2;
break; break;
case RULE_READINT: case RULE_READINT:
/* [ width | (endianess << 5) | (signedness << 6), tag ] */ /* [ width | (endianness << 5) | (signedness << 6), tag ] */
if (rule[1] > JANET_MAX_READINT_WIDTH) goto bad; if (rule[1] > JANET_MAX_READINT_WIDTH) goto bad;
i += 3; i += 3;
break; break;
@@ -1725,7 +1725,7 @@ static JanetPeg *compile_peg(Janet x) {
JANET_CORE_FN(cfun_peg_compile, JANET_CORE_FN(cfun_peg_compile,
"(peg/compile peg)", "(peg/compile peg)",
"Compiles a peg source data structure into a <core/peg>. This will speed up matching " "Compiles a peg source data structure into a <core/peg>. This will speed up matching "
"if the same peg will be used multiple times. Will also use `(dyn :peg-grammar)` to suppliment " "if the same peg will be used multiple times. Will also use `(dyn :peg-grammar)` to supplement "
"the grammar of the peg for otherwise undefined peg keywords.") { "the grammar of the peg for otherwise undefined peg keywords.") {
janet_fixarity(argc, 1); janet_fixarity(argc, 1);
JanetPeg *peg = compile_peg(argv[0]); JanetPeg *peg = compile_peg(argv[0]);

View File

@@ -58,7 +58,7 @@ void janet_vm_load(JanetVM *from) {
} }
/* Trigger suspension of the Janet vm by trying to /* Trigger suspension of the Janet vm by trying to
* exit the interpeter loop when convenient. You can optionally * exit the interpreter loop when convenient. You can optionally
* use NULL to interrupt the current VM when convenient */ * use NULL to interrupt the current VM when convenient */
void janet_interpreter_interrupt(JanetVM *vm) { void janet_interpreter_interrupt(JanetVM *vm) {
vm = vm ? vm : &janet_vm; vm = vm ? vm : &janet_vm;

View File

@@ -34,9 +34,9 @@
* because E is a valid digit in bases 15 or greater. For bases greater than * because E is a valid digit in bases 15 or greater. For bases greater than
* 10, the letters are used as digits. A through Z correspond to the digits 10 * 10, the letters are used as digits. A through Z correspond to the digits 10
* through 35, and the lowercase letters have the same values. The radix number * through 35, and the lowercase letters have the same values. The radix number
* is always in base 10. For example, a hexidecimal number could be written * is always in base 10. For example, a hexadecimal number could be written
* '16rdeadbeef'. janet_scan_number also supports some c style syntax for * '16rdeadbeef'. janet_scan_number also supports some c style syntax for
* hexidecimal literals. The previous number could also be written * hexadecimal literals. The previous number could also be written
* '0xdeadbeef'. * '0xdeadbeef'.
*/ */

View File

@@ -67,7 +67,7 @@ static JanetTable *janet_table_init_impl(JanetTable *table, int32_t capacity, in
return table; return table;
} }
/* Initialize a table (for use withs scratch memory) */ /* Initialize a table (for use with scratch memory) */
JanetTable *janet_table_init(JanetTable *table, int32_t capacity) { JanetTable *janet_table_init(JanetTable *table, int32_t capacity) {
return janet_table_init_impl(table, capacity, 1); return janet_table_init_impl(table, capacity, 1);
} }

View File

@@ -972,7 +972,7 @@ const char *janet_strerror(int e) {
#ifdef JANET_WINDOWS #ifdef JANET_WINDOWS
/* Microsoft strerror seems sane here and is thread safe by default */ /* Microsoft strerror seems sane here and is thread safe by default */
return strerror(e); return strerror(e);
#elif defined(_GNU_SOURCE) #elif defined(__GLIBC__)
/* See https://linux.die.net/man/3/strerror_r */ /* See https://linux.die.net/man/3/strerror_r */
return strerror_r(e, janet_vm.strerror_buf, sizeof(janet_vm.strerror_buf)); return strerror_r(e, janet_vm.strerror_buf, sizeof(janet_vm.strerror_buf));
#else #else

View File

@@ -141,7 +141,7 @@ int janet_gettime(struct timespec *spec, enum JanetTimeSource source);
#define strdup(x) _strdup(x) #define strdup(x) _strdup(x)
#endif #endif
/* Use LoadLibrary on windows or dlopen on posix to load dynamic libaries /* Use LoadLibrary on windows or dlopen on posix to load dynamic libraries
* with native code. */ * with native code. */
#if defined(JANET_NO_DYNAMIC_MODULES) #if defined(JANET_NO_DYNAMIC_MODULES)
typedef int Clib; typedef int Clib;

View File

@@ -1268,7 +1268,7 @@ static JanetSignal run_vm(JanetFiber *fiber, Janet in) {
/* /*
* Execute a single instruction in the fiber. Does this by inspecting * Execute a single instruction in the fiber. Does this by inspecting
* the fiber, setting a breakpoint at the next instruction, executing, and * the fiber, setting a breakpoint at the next instruction, executing, and
* reseting breakpoints to how they were prior. Yes, it's a bit hacky. * resetting breakpoints to how they were prior. Yes, it's a bit hacky.
*/ */
JanetSignal janet_step(JanetFiber *fiber, Janet in, Janet *out) { JanetSignal janet_step(JanetFiber *fiber, Janet in, Janet *out) {
/* No finished or currently alive fibers. */ /* No finished or currently alive fibers. */
@@ -1613,7 +1613,7 @@ int janet_init(void) {
janet_vm.registry_count = 0; janet_vm.registry_count = 0;
janet_vm.registry_dirty = 0; janet_vm.registry_dirty = 0;
/* Intialize abstract registry */ /* Initialize abstract registry */
janet_vm.abstract_registry = janet_table(0); janet_vm.abstract_registry = janet_table(0);
janet_gcroot(janet_wrap_table(janet_vm.abstract_registry)); janet_gcroot(janet_wrap_table(janet_vm.abstract_registry));

View File

@@ -46,7 +46,7 @@ extern "C" {
#endif #endif
/* /*
* Detect OS and endianess. * Detect OS and endianness.
* From webkit source. There is likely some extreneous * From webkit source. There is likely some extreneous
* detection for unsupported platforms * detection for unsupported platforms
*/ */
@@ -262,7 +262,7 @@ extern "C" {
#endif #endif
#endif #endif
/* Tell complier some functions don't return */ /* Tell compiler some functions don't return */
#ifndef JANET_NO_RETURN #ifndef JANET_NO_RETURN
#ifdef JANET_WINDOWS #ifdef JANET_WINDOWS
#define JANET_NO_RETURN __declspec(noreturn) #define JANET_NO_RETURN __declspec(noreturn)
@@ -272,7 +272,7 @@ extern "C" {
#endif #endif
/* Prevent some recursive functions from recursing too deeply /* Prevent some recursive functions from recursing too deeply
* ands crashing (the parser). Instead, error out. */ * and crashing (the parser). Instead, error out. */
#define JANET_RECURSION_GUARD 1024 #define JANET_RECURSION_GUARD 1024
/* Maximum depth to follow table prototypes before giving up and returning nil. */ /* Maximum depth to follow table prototypes before giving up and returning nil. */
@@ -2150,7 +2150,7 @@ typedef enum {
RULE_TO, /* [rule] */ RULE_TO, /* [rule] */
RULE_THRU, /* [rule] */ RULE_THRU, /* [rule] */
RULE_LENPREFIX, /* [rule_a, rule_b (repeat rule_b rule_a times)] */ RULE_LENPREFIX, /* [rule_a, rule_b (repeat rule_b rule_a times)] */
RULE_READINT, /* [(signedness << 4) | (endianess << 5) | bytewidth, tag] */ RULE_READINT, /* [(signedness << 4) | (endianness << 5) | bytewidth, tag] */
RULE_LINE, /* [tag] */ RULE_LINE, /* [tag] */
RULE_COLUMN, /* [tag] */ RULE_COLUMN, /* [tag] */
RULE_UNREF, /* [rule, tag] */ RULE_UNREF, /* [rule, tag] */

View File

@@ -754,7 +754,7 @@
(default name (string "has-key? " (++ test-has-key-auto))) (default name (string "has-key? " (++ test-has-key-auto)))
(assert (= expected (has-key? col key)) name) (assert (= expected (has-key? col key)) name)
(if (if
# guarenteed by `has-key?` to never fail # guaranteed by `has-key?` to never fail
expected (in col key) expected (in col key)
# if `has-key?` is false, then `in` should fail (for indexed types) # if `has-key?` is false, then `in` should fail (for indexed types)
# #

View File

@@ -492,7 +492,7 @@
# header, followed by body, and drop the :header-len capture # header, followed by body, and drop the :header-len capture
:packet (/ (* :packet-header :packet-body) ,|$1) :packet (/ (* :packet-header :packet-body) ,|$1)
# any exact seqence of packets (no extra characters) # any exact sequence of packets (no extra characters)
:main (* (any :packet) -1)})) :main (* (any :packet) -1)}))
(assert (deep= @["a" "bb" "ccc"] (peg/match peg2 "1:a2:bb3:ccc")) (assert (deep= @["a" "bb" "ccc"] (peg/match peg2 "1:a2:bb3:ccc"))