1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-08 09:49:58 +00:00

Fix typos

This commit is contained in:
Philip Nelson 2024-06-16 06:59:27 -07:00
parent f95de25b15
commit 0b51ab157d
20 changed files with 40 additions and 40 deletions

View File

@ -114,7 +114,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.
@ -285,7 +285,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
@ -339,7 +339,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.
@ -489,13 +489,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

@ -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))

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

@ -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,

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);
} }

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

@ -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"))