about summary refs log tree commit diff stats
path: root/subx/apps
Commit message (Collapse)AuthorAgeFilesLines
* .Kartik Agaram2019-05-2711-135/+142
| | | | | | 'get-or-insert-stream' is now the more generic 'get-or-insert' that can handle tables of any value type. But callers have to be careful to cast values to the right type.
* .Kartik Agaram2019-05-266-385/+278
|
* new primitive: check-array-equalKartik Agaram2019-05-267-0/+0
|
* new primitive: parse-array-of-intsKartik Agaram2019-05-2512-0/+45
| | | | | | | | | | 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-2510-18/+0
| | | | | hoist 'Heap' variable into the std library in anticipation of the parse-array-of-ints primitive.
* new primitive: array-equal?Kartik Agaram2019-05-257-0/+0
|
* new primitive for tests: check-string-equalKartik Agaram2019-05-257-0/+0
|
* .Kartik Agaram2019-05-241-7/+6
|
* .Kartik Agaram2019-05-201-0/+0
|
* .Kartik Agaram2019-05-191-0/+6
| | | | add lengths to data blobs
* initial skeleton for survey.subxKartik Agaram2019-05-182-0/+297
| | | | | | | | Start of the final phase needed to implement SubX in SubX: $ cat files.subx ... |dquotes |assort |pack |survey |hex > a.elf survey.subx is responsible for assigning addresses to labels and segments.
* 5189Kartik Agaram2019-05-187-0/+0
| | | | Fix CI.
* support the new segment syntax in assort.subxKartik Agaram2019-05-172-51/+35
| | | | | | | | | | | Now all implemented phases of the SubX translator in SubX support the new syntax: ✓ hex.subx (no changes required) survey.subx (not yet started) ✓ pack.subx (fixed here) ✓ assort.subx ✓ dquotes.subx (has failing tests for other reasons)
* another phase that supports the new segment syntaxKartik Agaram2019-05-172-18/+18
| | | | | | | | | | Current state: ✓ hex.subx (no changes required) survey.subx ✓ pack.subx (fixed here) assort.subx ✓ dquotes.subx (has failing tests for other reasons)
* start of new syntax for segment headersKartik Agaram2019-05-172-26/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Right now SubX defines headers with the following syntax: ``` === ... ``` The `...` can be either a numeric address or a name. Numeric addresses are useful for tests where we want to check addresses of individual instructions. Names are useful in real programs where we want to add to a segment in many places. This approach has long seemed a mess. It's hard to explain, and there's a certain amount of historical evolution that led to it that should be irrelevant to comprehend the current state of the codebase. I started out assuming the first segment was always code, before adding the special names 'code' and 'data'. We pretend to support more than two segments but we don't really. To simplify the code and explanation we'll move to a new syntax: ``` === <name> <address> ``` Code will always belong in the special name 'code', but it no longer has to be first. We need to migrate both our SubX-in-SubX phases and the C++ version. The plan is to start from the top down and update bootstrapping phases that've already been built (see commit 5102 for the list of phases). This commit updates pack.subx. Current state: ✓ hex.subx (no changes required) survey.subx ✓ pack.subx (fixed here) assort.subx dquotes.subx
* 5181Kartik Agaram2019-05-172-0/+20
| | | | Test for the bugfix of commit 2f49a27504.
* 5180Kartik Agaram2019-05-1610-43/+24
| | | | | | | 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-159-42/+98
| | | | | | | | | | | | | | | | 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.
* .Kartik Agaram2019-05-142-9/+9
|
* fix a stale register value in dquotes.subxKartik Agaram2019-05-142-1/+2
| | | | | | | | | | | | | How did things seem to be working until now? - We were saving an address from the stack to stream.read - When we read this address in skip-chars-matching:loop, we used to stop early But now we've moved the stack to a larger address, one where the most significant byte is set. When the stack address now gets to skip-chars-matching:loop, it's treated as a negative number and we proceed through the loop. At which point we try to index into the array using it. No real test to be written to protect against this :(
* Merge branch 'dquotes' into dquotes-1Kartik Agaram2019-05-139-1/+230
|\ | | | | | | | | dquotes.subx is now segfaulting after this merge. Seems to be trying to use addresses from the old stack.
| * Merge branch 'master' into dquotesKartik Agaram2019-05-137-0/+0
| |\
| | * start using the new carry flagKartik Agaram2019-05-137-0/+0
| | | | | | | | | | | | | | | Skimping on tests; the code changes seem pretty trivial. Will this fix CI?!
| | * 5156 - error-checking on writes to fileKartik Agaram2019-05-117-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-117-0/+0
| | | | | | | | | | | | | | | Bugfix: I'd neglected to update the input stream's state when natively writing a stream to file.
| | * 5153Kartik Agaram2019-05-117-0/+0
| | |
| * | Merge branch 'master' into dquotesKartik Agaram2019-05-1011-23/+99
| |\| | | | | | | | | | apps/dquotes still segfaulting on native run.
| * | implemented emit-metadatanc2019-05-041-1/+57
| | |
| * | failing tests for part 2/2 of dquotesKartik Agaram2019-04-291-0/+173
| | | | | | | | | | | | Emitting the metadata for literal strings.
* | | Merge branch 'master' into dquotes-1Kartik Agaram2019-05-1010-23/+99
|\ \ \ | | |/ | |/| | | | Segfault in this branch is now fixed.
| * | 5151 - use mmap everywhere we need a heapKartik Agaram2019-05-1011-23/+99
| | | | | | | | | | | | | | | 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-047-0/+0
| | |
| * | 5135Kartik Agaram2019-05-047-0/+0
| | |
* | | dquotes - emit data segment - no escapesKartik Agaram2019-05-032-1/+138
| | | | | | | | | | | | Convert raw literal strings (no escape sequences) to the data segment.
* | | new primitives: append-byte, append-byte-hexKartik Agaram2019-05-027-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-0215-66/+67
| | | | | | | | | | | | | | | Operations on buffered-file now always include the word 'buffered'. More verbose, but hopefully this highlights holes in the library.
* | | failing tests for part 1/2 of dquotesKartik Agaram2019-04-291-1/+274
| |/ |/| | | | | Converting literal strings into bytes in the data segment.
* | new failing test in dquotes phaseKartik Agaram2019-04-282-1/+259
|/ | | | | | | | | | | | | | | I'm switching to a more exposed working dynamic after chatting with Charles Saternos (https://github.com/akkartik/mu/pull/19). From now on I'll start a new branch for big features. Branches won't always pass all their tests. Phases have gone weeks in the past before being committed all at once. Developing in a branch gives others the opportunity to see more current progress and jump in more easily. Some 'kata' branches for new contributors to start at: * add two numbers: https://github.com/akkartik/mu/pull/21 * write a string to a byte stram: https://github.com/akkartik/mu/pull/22 * print a number in decimal to a byte stream: https://github.com/akkartik/mu/pull/20
* 5127Kartik Agaram2019-04-261-1/+1
|
* 5124Kartik Agaram2019-04-232-2/+2
|
* 5123Kartik Agaram2019-04-231-4/+0
|
* 5118 - convert int to stringKartik Agaram2019-04-238-0/+0
|
* 5115Kartik Agaram2019-04-222-1/+1
|
* 5112Kartik Agaram2019-04-192-1/+63
|
* 5108Kartik Agaram2019-04-182-10/+10
|
* 5107Kartik Agaram2019-04-182-4/+281
|
* 5106Kartik Agaram2019-04-173-2/+147
|
* 5105Kartik Agaram2019-04-167-388/+200
| | | | | Pull in a _different_ function than `next-word` (commit 5092) into a shared file between phases. Let's see how this goes.
* 5104Kartik Agaram2019-04-162-18/+13
| | | | Don't forget metadata for string literals.
* 5103Kartik Agaram2019-04-162-61/+88
|