about summary refs log tree commit diff stats
path: root/subx/apps/handle
Commit message (Collapse)AuthorAgeFilesLines
* 5460Kartik Agaram2019-07-241-0/+0
| | | | | | | | | | | A little more resizing of buffers. apps/hex.subx is now building an identical binary. I'm now aborting on allocation failures. That requires disabling a couple of tests. (I'm not quite confident enough of this decision to delete them outright.) I want to treat all segfaults as bugs, and machine code is no place to add boilerplate checks for return values of standard library functions.
* 5454Kartik Agaram2019-07-221-0/+0
| | | | Bugfix fifteen -- on the C++ side.
* 5438 - raise error on uppercase hexKartik Agaram2019-07-211-0/+0
| | | | | | | | | | | | | | | | | | We can now translate layers 49-56 using the self-hosted translator (`translate` and `ntranslate`). As a follow-up to commit 5404, the self-hosted translator is a little more strict than the C++ translator in 3 places: a) All .subx files must define a data segment. b) All .subx files must define an `Entry` label. c) All numbers must be in *lowercase* hex. In all cases, where programs work with the C++ translator but violate the self-hosted translator's assumptions, we must make sure we raise errors rather than silently emit bad code.
* 5437Kartik Agaram2019-07-211-0/+0
| | | | Break a dependency from `print-int32` to `from-hex-char`.
* 5429Kartik Agaram2019-07-201-0/+0
| | | | Fix CI.
* 5408Kartik Agaram2019-07-161-0/+0
| | | | | | | | | | | | Bugfix ten: type error in `convert`. I was calling `rewind-stream` on a `buffered-file`. examples/ex1 is now just one nibble off the canonical. I *have* found one missing feature in the self-hosted translator, though: dquotes doesn't support newlines in strings, even though the C++ version does. dquotes parses them right, but the value initialized in the data segment is wrong.
* zero out new rows returned by get-or-insertKartik Agaram2019-07-101-0/+0
|
* .Kartik Agaram2019-07-081-0/+0
| | | | | | Move test slice variables out of the data segment and close to their usages. Makes tests a little easier to read even if we spend a few more instructions each time.
* move `is-label?` to `subx-common`Kartik Agaram2019-07-071-0/+0
|
* Merge branch 'master' into surveyKartik Agaram2019-07-031-0/+0
|\ | | | | | | | | | | High time we pulled in the final changes to dquotes. In the process we fix one recently introduced duplicate symbol.
| * 5219Kartik Agaram2019-05-221-0/+0
| | | | | | | | | | After fixing bugs, checking alloc_ids now requires 9 instructions rather than 6.
| * 5218Kartik Agaram2019-05-221-0/+0
| |
| * 5217Kartik Agaram2019-05-221-0/+0
| | | | | | | | | | | | | | | | Couple of typos in handle.subx. We didn't notice because a missing /r32 field gets turned into 0/EAX anyway, and because ECX happens to have the same value as EAX in the specific test caller. But it's still not running as expected, now that I'm looking closely.
* | some primitives for emitting tracesKartik Agaram2019-07-011-0/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Kinda hacky, but might scale enough for machine code. This was really hard to debug. Single tests passed, but when I ran all tests I got breakage because tests long before (from the 056trace layer) were not cleaning up properly. My instinct was to call clear-stream on Trace-stream, which was wrong (the trace didn't have the wrong contents, it was literally a bad object). It was also wrong in a counter-productive way: calling clear-stream on a real Trace stream (which is the size of a page of memory) takes a long time in emulated mode.
* | .Kartik Agaram2019-07-011-0/+0
| |
* | unsigned comparison for addresses in more placesKartik Agaram2019-07-011-0/+0
| |
* | .Kartik Agaram2019-06-281-0/+0
| | | | | | | | Clean up CI.
* | .Kartik Agaram2019-06-081-0/+0
| |
* | Fix stale `initialize-trace-stream`Kartik Agaram2019-06-081-0/+0
| |
* | .Kartik Agaram2019-06-081-0/+0
| | | | | | | | Simplify `string-equal`.
* | start fleshing out trace support some moreKartik Agaram2019-06-051-0/+0
| | | | | | | | | | I think the path to readable tests for survey.subx passes through white-box tests.
* | .Kartik Agaram2019-05-271-0/+0
| | | | | | | | | | | | '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.
* | new primitive: check-array-equalKartik Agaram2019-05-261-0/+0
| |
* | 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.