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
Roman Godmaire
bd12bd998b
lint: clippy
2024-02-16 07:32:25 -05:00
Roman Godmaire
75591cac9a
Mal step 3
2023-09-19 10:15:40 -04:00
Roman Godmaire
dfeb5d1b45
refactor: Move expression to eval
2023-09-19 08:28:32 -04:00
Roman Godmaire
b9b833bf5c
Mal step 2
2023-09-19 08:17:13 -04:00
Roman Godmaire
96f822ace8
Mal Step 1
2023-09-13 08:47:24 -04:00
Roman Godmaire
ac87083777
MAL Step 0
2023-09-12 07:21:51 -04:00