about summary refs log tree commit diff stats
path: root/shell
Commit message (Collapse)AuthorAgeFilesLines
* try to abolish NULL from primitivesKartik K. Agaram2021-06-111-77/+504
|
* car/cdr of nil is now nilKartik K. Agaram2021-06-111-2/+18
|
* hacky bugfix: support floats in nthKartik K. Agaram2021-06-111-1/+1
| | | | | | | | | | | | | | | Needed because we don't yet have a primitive in the shell to truncate/round non-integers to integers. Before: (nth (/ 31 10) # we don't have float literals yet '(1 2 3 4)) => NULL ..with an unpleasant abort likely later on. Really the correct thing to do is ensure none of my primitives ever returns NULL. Start with car/cdr.
* better nameKartik K. Agaram2021-06-111-2/+3
|
* cancel pending testKartik K. Agaram2021-06-111-64/+0
| | | | | | | | | | | After all that, I'm not sure this is the desired behavior. If a function defines multiple bindings, we shouldn't rename all their keys. So how to choose? Perhaps it's not so bad to have "symlinks" in this "file system". To unlink two bindings you now need to define one of them in the sandbox. All the refactoring is still useful, though.
* back to the pending testKartik K. Agaram2021-06-111-60/+4
| | | | I'm ready again to take on commit 6169ec59c after lots of refactoring.
* .Kartik K. Agaram2021-06-111-3/+25
| | | | | | | | Save a single trace to potentially multiple globals just like a gap buffer (if say we have a single let binding defining multiple functions). I don't have a strong use for this yet, but it seems cleaner. Maybe it's redundant or wrong.
* .Kartik K. Agaram2021-06-111-1/+0
|
* .Kartik K. Agaram2021-06-111-29/+9
|
* .Kartik K. Agaram2021-06-111-2/+2
|
* .Kartik K. Agaram2021-06-111-82/+6
|
* .Kartik K. Agaram2021-06-113-4/+4
|
* .Kartik K. Agaram2021-06-112-2/+2
|
* .Kartik K. Agaram2021-06-112-41/+41
|
* .Kartik K. Agaram2021-06-111-3/+3
|
* .Kartik K. Agaram2021-06-111-4/+0
|
* .Kartik K. Agaram2021-06-112-22/+25
|
* .Kartik K. Agaram2021-06-111-1/+0
|
* .Kartik K. Agaram2021-06-111-12/+11
|
* .Kartik K. Agaram2021-06-111-54/+50
| | | | | | Inline a function by patching a few variable names. I don't even have to worry about `return` statements if there's a single call and it's in tail position in the caller.
* .Kartik K. Agaram2021-06-111-11/+13
|
* start showing parse errors under definitionsKartik K. Agaram2021-06-111-2/+10
| | | | | | We don't have support for browsing them yet. Just errors for now, which should only be a line or two. Larger traces might be useful for inspecting results of macroexpansion.
* .Kartik K. Agaram2021-06-111-6/+6
|
* .Kartik K. Agaram2021-06-111-13/+34
|
* .Kartik K. Agaram2021-06-092-36/+36
|
* .Kartik K. Agaram2021-06-092-47/+32
|
* .Kartik K. Agaram2021-06-092-15/+19
|
* .Kartik K. Agaram2021-06-091-3/+4
|
* .Kartik K. Agaram2021-06-095-44/+52
| | | | Add argument to a few functions.
* .Kartik K. Agaram2021-06-092-3/+3
|
* make tests pass againKartik K. Agaram2021-06-092-1/+6
| | | | | I'm temporarily disabling the pending state. I'm also providing a clearer error message when we encounter the bug.
* snapshot: attempt at modifying a function nameKartik K. Agaram2021-06-092-11/+121
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It turns out there's another problem, and it predates the ability to create new definitions: ctrl-s triggers a call to `evaluate`, which inserts a new definition into globals. which has a null gap buffer. All this happens long before the new code in this commit, resulting in a null gap buffer by the time we get to word-at-cursor. Which in turn happens because we perform a raw `evaluate`, which doesn't update the gap buffer like `run` does (using `maybe-stash-gap-buffer-to-global`). And arguably `evaluate` shouldn't mess with the gap buffer. Gap buffers are a UI concern. The hardest version of this immediate scenario: It's unclear how to guarantee that every definition have a gap buffer, when two definitions may share one (closures sharing a lexical environment). New plan: - improve the logic for detecting definitions. Looking at the outermost layer isn't enough. And a single expression can create multiple definitions. - extract a helper to attach a single gap buffer to multiple definitions. - have the UI detect conflicts in gap buffers and prompt the user for a decision if a different gap buffer already exists for a definition.
* .Kartik K. Agaram2021-06-081-11/+11
|
* .Kartik K. Agaram2021-06-081-330/+330
|
* shell: function modal now also creates functionsKartik K. Agaram2021-06-083-5/+183
|
* shell: expand set of possible errorsKartik K. Agaram2021-06-081-12/+13
| | | | | Requires a change to mu.subx, to unify literal strings with generic (addr array _)
* .Kartik K. Agaram2021-06-081-20/+17
|
* a place for error messages in the function modalKartik K. Agaram2021-06-081-7/+101
| | | | Probably not ideal, but it's a start.
* ok, function modal now has full coverageKartik K. Agaram2021-06-081-3/+104
|
* .Kartik K. Agaram2021-06-081-7/+85
|
* first test for function modalKartik K. Agaram2021-06-081-6/+41
|
* .Kartik K. Agaram2021-06-081-37/+33
|
* .Kartik K. Agaram2021-06-084-72/+82
| | | | | | | I wrote a comment about how some code was not covered by tests, and then promptly forgot what it was for. This is why we need tests. Now the hack is gone.
* shell: first test for entire environmentKartik K. Agaram2021-06-082-6/+77
| | | | This introduces some ergonomic issues. But we have to start somewhere.
* fizz-buzz take 2Kartik K. Agaram2021-06-061-11/+24
|
* reverse-video for cursorKartik K. Agaram2021-06-062-15/+18
|
* fizz-buzz exerciseKartik K. Agaram2021-06-061-3/+11
|
* shell: concept of palettesKartik K. Agaram2021-06-061-13/+8
|
* growing disenamored with up and downKartik K. Agaram2021-06-061-8/+5
|
* .Kartik K. Agaram2021-06-061-14/+24
|