Commit graph

56 commits

Author SHA1 Message Date
Roman Godmaire
02463197c3 misc: Chesterton's Fence
Everything is a list in lisp for a reason 🙃
2024-05-12 08:11:12 -04:00
Roman Godmaire
f1083009a4 refactor: split parser and interpreter into separate crates 2024-05-06 21:51:22 -04:00
Roman Godmaire
e49dbab859 feat: rudimentary float support 2024-05-06 08:50:38 -04:00
Roman Godmaire
1ed451e696 fix: support up to 128-bit integers
Floats should be next
2024-05-06 08:28:46 -04:00
Roman Godmaire
cbdff2c170 lint: clippy fixes 2024-05-06 08:01:18 -04:00
Roman Godmaire
5e072c0773 misc: remove anyhow dependency 2024-05-06 07:57:54 -04:00
Roman Godmaire
7e4166386f refactor: extract CLI to binary
Also start getting rid of anyhow
2024-05-05 11:16:45 -04:00
Roman Godmaire
e9c350e925 feat: quasiquote & unquote
This is an abomination, but it works
2024-05-05 10:31:02 -04:00
Roman Godmaire
66a2905c60 misc: CLI ergonomic improvements 2024-05-05 09:49:12 -04:00
Roman Godmaire
db4bb2de8f feat: actual CLI interface 2024-05-05 09:21:45 -04:00
Roman Godmaire
b3a9bca32d feat: readline support in REPL 2024-05-05 08:36:57 -04:00
Roman Godmaire
00ac922bd0 feat: basic quoting
...  I think this is right?
2024-05-04 21:55:17 -04:00
Roman Godmaire
c596e00be8 feat: eval/apply functions 2024-05-04 21:14:47 -04:00
Roman Godmaire
2d93c83b67 feat: File IO! 2024-05-04 21:14:35 -04:00
Roman Godmaire
936f557536 feat: allow underscores in integers 2024-05-04 19:33:39 -04:00
Roman Godmaire
527737f020 fix: closures are functions, functions are closures 2024-05-04 19:23:25 -04:00
Roman Godmaire
e6b487a09a perf: RC environment
This now means environments are genuinely shared instead of clones
2024-05-04 19:03:14 -04:00
Roman Godmaire
18ea5f34e6 fix: remove dbg statement... 2024-05-04 18:49:40 -04:00
Roman Godmaire
93d53bd2a1 feat: differentiate between functions and closures 2024-05-04 18:45:43 -04:00
Roman Godmaire
b1ddc907e6 fix: don't include void nodes in eval result 2024-05-04 18:45:19 -04:00
Roman Godmaire
b582d66fcf feat: display to print/println 2024-05-04 18:05:22 -04:00
Roman Godmaire
58d1ffe48f feat: do statement for blocks 2024-05-04 18:05:09 -04:00
Roman Godmaire
5bdc677763 lint: referencing a reference 2024-05-04 17:49:02 -04:00
Roman Godmaire
30ebafb89d fix: support if without else
If statements without an else should evaluate to nil if the condition is
not valid.  These are mainly used for side effects, but sometimes you
might want a value.
2024-05-04 17:43:38 -04:00
Roman Godmaire
8ac46f36a8 fix: conditionally run if branches
NativeFunc evaluates the parameters before passing them into the
function, but Specials pass in the raw nodes.  If a function had side
effects (ie. display) then it would run even if the branch wasn't
the one chosen by the condition.
2024-05-04 17:38:40 -04:00
Roman Godmaire
a612bb771b feat: count function for collections 2024-05-04 17:26:26 -04:00
Roman Godmaire
59dfe1e854 feat: empty? func for list, vec, hashmap 2024-05-04 17:24:01 -04:00
Roman Godmaire
92b32ff2df feat: basic string coercion 2024-05-04 17:10:51 -04:00
Roman Godmaire
0af757fa27 test: additional test cases 2024-05-04 17:02:07 -04:00
Roman Godmaire
769cc61d48 feat: add list constructor 2024-05-04 16:52:55 -04:00
Roman Godmaire
c38576b667 refactor: extract env, macros, error, and remove expression
Rather than using expressions, we can instead just parse into nodes then
work with those instead.  Everything in this language is an Expression,
so there's no reason to differentiate between nodes and expressions.
2024-05-04 16:40:02 -04:00
Roman Godmaire
51095f77ed refactor: Extract Node enum to module 2024-05-04 15:23:06 -04:00
Roman Godmaire
5863da677f refactor: move lexer to parser module 2024-05-04 13:13:34 -04:00
Roman Godmaire
4808904571 refactor: prep for switching to Node in evaluator
Involves the following

1. Node True/False to Boolean
2. Removing parser tests
3. Other stuff
4. This is a bad commit
2024-05-04 08:08:37 -04:00
Roman Godmaire
040a2518cc fix: incorrect arg counting for modulo 2024-03-09 08:10:02 -05:00
Roman Godmaire
26ba457e8e chore: rename to mute 2024-03-09 07:55:17 -05:00
Roman Godmaire
282071efc1 fix: dynamic counting for modulo arg counts 2024-02-17 22:36:01 -05:00
Roman Godmaire
4a02f7cb95 refactor: use macro for arg counting 2024-02-17 22:16:51 -05:00
Roman Godmaire
c2b95dfee4 feat: ordering operators 2024-02-17 21:56:43 -05:00
Roman Godmaire
519fa4ee99 feat: display function 2024-02-17 21:14:31 -05:00
Roman Godmaire
ad66e839fa misc: remove unnecessary constants
This is premature optimization.
2024-02-17 07:13:15 -05:00
Roman Godmaire
1d16187846 fix: support truthy values
In scheme, everything except false is considered truthy.
2024-02-17 07:11:18 -05:00
Roman Godmaire
5637d256d2 feat: eq? operator 2024-02-17 07:06:08 -05:00
Roman Godmaire
fbd0070324 feat: not operator 2024-02-17 07:05:58 -05:00
Roman Godmaire
939bb15324 misc: display function as nebulous blob 2024-02-17 06:58:40 -05:00
Roman Godmaire
288e2f4feb fix: provide details on argument count errors 2024-02-17 06:58:22 -05:00
Roman Godmaire
4e7c8eba01 fix: don't panic on error in repl 2024-02-17 06:52:14 -05:00
Roman Godmaire
49e99b6fa4 feat: functions 2024-02-16 10:03:22 -05:00
Roman Godmaire
f5ac02aedb fix: nil and () are identical 2024-02-16 08:28:22 -05:00
Roman Godmaire
f93baad338 feat: if statements 2024-02-16 08:22:57 -05:00