diff options
| author | LLLL Colonq <llll@colonq> | 2025-12-19 21:31:02 -0500 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2025-12-19 21:31:02 -0500 |
| commit | 0a6ce352be7d0a8a2cdb2f9a3ae3b0189c5f23b5 (patch) | |
| tree | dc79bf6249ba90a384794954c1a06568a9ef6aa8 | |
| parent | 2dfa52e475fbc5614f92cfbc42d5b25fc5b8eff2 (diff) | |
Add pit_plist_get
| -rw-r--r-- | include/lcq/pit/runtime.h | 1 | ||||
| -rw-r--r-- | src/library.c | 8 | ||||
| -rw-r--r-- | src/runtime.c | 9 |
3 files changed, 11 insertions, 7 deletions
diff --git a/include/lcq/pit/runtime.h b/include/lcq/pit/runtime.h index 32bf198..8206a4b 100644 --- a/include/lcq/pit/runtime.h +++ b/include/lcq/pit/runtime.h @@ -196,6 +196,7 @@ void pit_setcdr(pit_runtime *rt, pit_value v, pit_value x); pit_value pit_append(pit_runtime *rt, pit_value xs, pit_value ys); pit_value pit_reverse(pit_runtime *rt, pit_value xs); pit_value pit_contains_eq(pit_runtime *rt, pit_value needle, pit_value haystack); +pit_value pit_plist_get(pit_runtime *rt, pit_value k, pit_value vs); /* working with functions */ pit_value pit_free_vars(pit_runtime *rt, pit_value args, pit_value body); diff --git a/src/library.c b/src/library.c index 9a40646..5b04e51 100644 --- a/src/library.c +++ b/src/library.c @@ -325,13 +325,7 @@ void pit_install_library_io(pit_runtime *rt) { static pit_value impl_plist_get(pit_runtime *rt, pit_value args) { pit_value k = pit_car(rt, args); pit_value vs = pit_car(rt, pit_cdr(rt, args)); - while (vs != PIT_NIL) { - if (pit_eq(k, pit_car(rt, vs))) { - return pit_car(rt, pit_cdr(rt, vs)); - } - vs = pit_cdr(rt, vs); - } - return PIT_NIL; + return pit_plist_get(rt, k, vs); } void pit_install_library_plist(pit_runtime *rt) { /* property lists / keyword arguments */ diff --git a/src/runtime.c b/src/runtime.c index fcfe81a..86c5fea 100644 --- a/src/runtime.c +++ b/src/runtime.c @@ -701,6 +701,15 @@ pit_value pit_contains_eq(pit_runtime *rt, pit_value needle, pit_value haystack) } return PIT_NIL; } +pit_value pit_plist_get(pit_runtime *rt, pit_value k, pit_value vs) { + while (vs != PIT_NIL) { + if (pit_eq(k, pit_car(rt, vs))) { + return pit_car(rt, pit_cdr(rt, vs)); + } + vs = pit_cdr(rt, vs); + } + return PIT_NIL; +} pit_value pit_free_vars(pit_runtime *rt, pit_value bound, pit_value body) { i64 expr_stack_reset = rt->expr_stack->top; |
