Roman Godmaire
d8724eb4b7
refactor: merge imports
2024-05-06 22:36:06 -04:00
Roman Godmaire
872195f6a5
feat: support floats in ordering operators
2024-05-06 22:35:39 -04:00
Roman Godmaire
e4484297a9
misc: remove i128 support
...
Rather than doing this, we should use a BigNumber library
2024-05-06 22:16:05 -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
c321bf83d3
docs: Add my name <3
2024-05-05 09:36:50 -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