summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* Fixed binding errors with builtin types "str", "int", and "decimal".Owen Jacobson2017-11-15
| | | | | | I forgot about wrapping. Fixes #2
* More outline workOwen Jacobson2017-11-15
|
* More outline workOwen Jacobson2017-11-15
|
* Renamed `defmacro` to `define-macro`, we're not heathens.Owen Jacobson2017-11-15
| | | | | | Started a language manual outline. Removed stray primer.
* Macro expander.Owen Jacobson2017-11-14
| | | | This includes a fairly complete quasiquote system, and a complete rework of the expander.
* fixup! Flatten arguments inside the evaluator.Owen Jacobson2017-11-13
|
* `begin` is now a special form.Owen Jacobson2017-11-13
| | | | | | | | Two reasons: 1. Making it a builtin defeats tail call optimization, as builtins do not participate in TCO. 2. The `begin` form is occasionally generated by the macro expander, and should not rely on library support.
* Flatten arguments inside the evaluator.Owen Jacobson2017-11-13
| | | | This makes it a bit easier to pass and return multiple values, and cuts down on the number of extra tuples created and dismantled.
* Compile lambdas on evaluation, not on execution.Owen Jacobson2017-11-13
| | | | This cuts down the cost of calling a function, as it now reuses an existing continuation rather than reconstructing the continuation for each call. Tail calls are now slightly more explicit.
* fixup! Expand the first argument of a form, not just the tailOwen Jacobson2017-11-13
|
* Expand the first argument of a form, not just the tailOwen Jacobson2017-11-13
|
* Always return _something_ from `display`Owen Jacobson2017-11-13
|
* Start tracking the (substantial) hypothesis examples DBOwen Jacobson2017-11-13
|
* Distinguish EOF and () in read()Owen Jacobson2017-11-13
|
* Fix up missing (begin) in exampleOwen Jacobson2017-11-13
|
* Re-add the repl, and a bunch of stdlib glue.Owen Jacobson2017-11-13
|
* A basic expander.Owen Jacobson2017-11-13
| | | | | This doesn't support macro expansion, but does support some basic syntax niceties. Macro expansion requires quote and quasiquote support.
* Big-ass coding binge presents: a Lisp.Owen Jacobson2017-11-13
| | | | This implements a continuation-passing interpreter, which means we get tail calls ferfree. I stopped short of implementing call/cc, because I don't think we need it, but we can get there if we have to.
* Remove lingering scripts entry.Owen Jacobson2017-11-11
|
* Introduce input ports.Owen Jacobson2017-11-11
| | | | | | | | | | | Ports are the lisp abstraction of files and streams. Actinide ports additionally guarantee a peek operation. This makes ``tokenize`` (now ``read_token``) callable as a lisp function, as it takes a port and reads one token from it. This is a substantial refactoring. As most of the state is now captured by closures, it's no longer practical to test individual states as readily. However, the top-level tokenizer tests exercise the full state space.
* Testing fixes.Owen Jacobson2017-11-11
| | | | | | | | | | | | | | | | | | | | | | * Add a top-level test that roundtrips sequences of tokens. (This found a real bug. Thanks, Hypothesis!) * Remove type conversion from the tokenizer. This simplifies the code, and makes testing considerably easier. * Fix some bugs in string literal parsing (again: Thanks, Hypothesis!) Document the test cases, and the case-by-case strategy, better. This also involved prying apart some tests that cover multiple cases. Stop treating empty strings as if they were EOFs. (Thanks, Hypothesis!) fixup! Stop treating empty strings as if they were EOFs. (Thanks, Hypothesis!) Remove type conversion from the tokenizer. It turns out that this made the tokenizer harder to test, because it was doing too many things. The tokenizer now _only_ divides the input port into tokens, without parsing or converting those tokens. Fix up tests for fuck
* Circle configOwen Jacobson2017-11-08
|
* Add tests for the individual tokenizer states.Owen Jacobson2017-11-08
|
* Wrote the tokenizer.Owen Jacobson2017-11-08
|
* draftOwen Jacobson2017-11-08