mirror of
https://github.com/janet-lang/janet
synced 2024-11-09 10:19:54 +00:00
commit
6518257129
10
CHANGELOG.md
10
CHANGELOG.md
@ -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
|
||||||
|
@ -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
|
||||||
@ -3847,7 +3847,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 +4179,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))
|
||||||
|
@ -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 */
|
||||||
|
@ -976,7 +976,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,
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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]);
|
||||||
|
@ -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;
|
||||||
|
@ -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'.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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));
|
||||||
|
|
||||||
|
@ -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] */
|
||||||
|
@ -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)
|
||||||
#
|
#
|
||||||
|
@ -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"))
|
||||||
|
Loading…
Reference in New Issue
Block a user