about summary refs log tree commit diff stats
path: root/subx/apps/factorial
Commit message (Collapse)AuthorAgeFilesLines
* new primitive: parse-array-of-intsKartik Agaram2019-05-251-0/+0
| | | | | | | | | | Mostly for tests. For every new type we want to compare in a test, we're now going to start using some primitive that can parse its value from string. In this manner we can get syntax for literals in machine code. Open question: parsing aggregates of aggregates. Like an array of structs. This is the first time we allocate from the heap in standard library tests. So we now need to start initializing the heap in all our apps.
* .Kartik Agaram2019-05-251-0/+0
| | | | | hoist 'Heap' variable into the std library in anticipation of the parse-array-of-ints primitive.
* new primitive: array-equal?Kartik Agaram2019-05-251-0/+0
|
* new primitive for tests: check-string-equalKartik Agaram2019-05-251-0/+0
|
* 5189Kartik Agaram2019-05-181-0/+0
| | | | Fix CI.
* 5180Kartik Agaram2019-05-161-0/+0
| | | | | | | Clean up some old TODOs related to our pre-mmap limitations. Also caught another case of using the wrong comparison. When comparing addresses, one must always use unsigned rather than signed jump instructions.
* complete the skeleton of dquotes.subxKartik Agaram2019-05-151-0/+0
| | | | | | | | | | | | | | | | Still some failing tests: - emit-string-literal-data doesn't ignore metadata when computing the length of literal strings - emit-string-literal-data doesn't handle escape sequences One issue doesn't have a failing test: - emit-metadata doesn't handle string literals containing '/' All these open issues involve a common design question: how to parse a 'word' that includes a string literal that may include spaces. For everything else I know words can't contain spaces and datums can't contain slashes. But for string literals things are tougher.
* Merge branch 'dquotes' into dquotes-1Kartik Agaram2019-05-131-0/+0
|\ | | | | | | | | dquotes.subx is now segfaulting after this merge. Seems to be trying to use addresses from the old stack.
| * start using the new carry flagKartik Agaram2019-05-131-0/+0
| | | | | | | | | | Skimping on tests; the code changes seem pretty trivial. Will this fix CI?!
| * 5156 - error-checking on writes to fileKartik Agaram2019-05-111-0/+0
| | | | | | | | | | | | | | Pretty blunt for now; just abort the entire program on any failure to write. I'm encountering it because I'm somehow treating a stream address as a file descriptor. Maybe mmap is returning addresses below 0x08000000?
| * 5154Kartik Agaram2019-05-111-0/+0
| | | | | | | | | | Bugfix: I'd neglected to update the input stream's state when natively writing a stream to file.
| * 5153Kartik Agaram2019-05-111-0/+0
| |
* | Merge branch 'master' into dquotes-1Kartik Agaram2019-05-101-0/+0
|\| | | | | | | Segfault in this branch is now fixed.
| * 5151 - use mmap everywhere we need a heapKartik Agaram2019-05-101-0/+0
| | | | | | | | | | All tests passing now. Things are very explicit; before a program can `allocate` memory, it has to first obtain a segment from the OS using `new-segment`.
| * 5145Kartik Agaram2019-05-041-0/+0
| |
| * 5135Kartik Agaram2019-05-041-0/+0
| |
* | new primitives: append-byte, append-byte-hexKartik Agaram2019-05-021-0/+0
| | | | | | | | | | | | | | These are variants of write-byte-buffered and print-byte-buffered respectively that operate on in-memory `stream`s rather than `buffered-file`s. They don't operate on files, so we'll avoid using the prefix 'write-'.
* | standardize function namesKartik Agaram2019-05-021-0/+0
|/ | | | | Operations on buffered-file now always include the word 'buffered'. More verbose, but hopefully this highlights holes in the library.
* 5118 - convert int to stringKartik Agaram2019-04-231-0/+0
|
* 5090Kartik Agaram2019-04-131-0/+0
| | | | | | | Start using the new newline escape in string literals everywhere. I could use it more aggressively, but it makes tests harder to read. So only one line of text per string for now.
* 5074Kartik Agaram2019-04-101-0/+0
| | | | | | | | | | | | | Fail early when writing to a fake file runs out of space. Makes debugging tests easier. Reads from files, on the other hand, are only buffering to a temporary stream, so it makes sense to silently stop when they run out of space. In the process I uncovered a testing bug in pack.subx: I was missing a trailing space in the expected result, but the test still passed because the space was getting truncated. Being principled about aborting on overflow by default will help avoid such issues.
* 5060Kartik Agaram2019-04-061-0/+0
|
* 5059Kartik Agaram2019-04-051-0/+0
|
* 5056Kartik Agaram2019-04-051-0/+0
|
* 5053Kartik Agaram2019-04-031-0/+0
| | | | | | write-stream-buffered isn't a clean abstraction. Ignoring the 'read' index of a stream is a hack. It's just saving us the trouble of a rewind-stream. So make it a helper of pack.subx rather than part of the standard library.
* 5027Kartik Agaram2019-03-271-0/+0
| | | | | | | | | Testing conversion of multiple lines in a data segment. Bugs fixed: 1. Stack issues in next-token helpers. 2. Needed to teach next-token to avoid newlines. 3. rewind-stream(line) before passing it to convert-code or convert-instruction.
* 4999Kartik Agaram2019-03-101-0/+0
| | | | | | | | Fix CI. pack.subx was passing in emulation but not natively. Commit 4954 on Feb 10 was a real dud. First I find I forgot to reclaim space for locals (commit 4996). Now I find I haven't been tracking registers properly either.
* 4996 - back on pack.subxKartik Agaram2019-03-081-0/+0
| | | | | | | | | Yet another redrawing of responsibilities between convert and its helpers. In the process I discovered a bug in `write-stream-buffered` which ended up taking me through a detour to extract `browse_trace` into its own tool. It turns out just having long buffers is enough to need browse_trace. Simple operations like clearing a stream swamp a flat view of the trace.
* 4988Kartik Agaram2019-02-251-0/+0
|
* 4981 - no, go back to 3 phasesKartik Agaram2019-02-181-0/+0
| | | | | | | | | | | | | Considering how much trouble a merge phase would be (commit 4978), it seems simpler to just add the extra syntax for controlling the entry point of the generated ELF binary. But I wouldn't have noticed this if I hadn't taken the time to write out the commit messages of 4976 and 4978. Even if we happened to already have linked list primitives built, this may still be a good idea considering that I'm saving quite a lot of code in duplicated entrypoints.
* 4968Kartik Agaram2019-02-141-0/+0
|
* 4965Kartik Agaram2019-02-141-0/+0
|
* 4961Kartik Agaram2019-02-141-0/+0
|
* 4955Kartik Agaram2019-02-101-0/+0
| | | | Starting to build up Phase 2 (apps/pack) out of recently designed primitives.
* 4954Kartik Agaram2019-02-101-0/+0
|
* 4952Kartik Agaram2019-02-051-0/+0
|
* 4951Kartik Agaram2019-02-031-0/+0
| | | | Cleaner way to compare streams in tests.
* 4949Kartik Agaram2019-02-021-0/+0
|
* 4945Kartik Agaram2019-02-011-0/+0
|
* 4938Kartik Agaram2019-01-201-0/+0
|
* 4937Kartik Agaram2019-01-201-0/+0
|
* 4930Kartik Agaram2019-01-151-0/+0
|
* 4929Kartik Agaram2019-01-151-0/+0
| | | | Clean up primitives for converting from/to hex chars.
* 4928Kartik Agaram2019-01-141-0/+0
|
* 4927Kartik Agaram2019-01-141-0/+0
|
* 4926Kartik Agaram2019-01-141-0/+0
|
* 4925Kartik Agaram2019-01-141-0/+0
|
* 4923Kartik Agaram2019-01-121-0/+0
| | | | | We want slice-equal? for length-prefixed strings, not null-terminated "kernel" strings.
* 4920Kartik Agaram2019-01-111-0/+0
|
* 4916Kartik Agaram2019-01-101-0/+0
| | | | | In the process of building slice primitives I found an out-of-bounds access in write-byte.