about summary refs log tree commit diff stats
path: root/subx/apps/pack
Commit message (Collapse)AuthorAgeFilesLines
* 5461 - SubX is now self-hosting!Kartik Agaram2019-07-241-0/+0
| | | | | All extant SubX programs generate identical binaries using either the C++ or the self-hosted SubX translators.
* 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.
* 5458Kartik Agaram2019-07-221-0/+0
| | | | | | Ensure we don't create overly long lines. Now this works: $ ./diff_ntranslate 0*.subx apps/subx-common.subx
* 5455Kartik Agaram2019-07-221-0/+0
| | | | | Clean up. All apps now translating correctly except for the phases of the self-hosted translator. Next step: SubX-in-SubX in SubX-in-SubX.
* 5448Kartik Agaram2019-07-221-0/+0
| | | | Make the output of the `pack` phase a little easier to read.
* 5443 - standard library is now self-hostedKartik Agaram2019-07-221-0/+0
| | | | | | | Translates 5k lines of input in 26 seconds. I'm not sure why I need to grow the label table. It was already 512 entries long, and I'm only using 373 so far.
* 5442Kartik Agaram2019-07-221-0/+0
| | | | | | | | | We can now translate layers 49-72 using the self-hosted translator. The translator has now demonstrated translation over 4k lines. Most verbose phase output is 325KB, even if the final binary is 15KB. Emulation is too slow now, so I'm back to debug by print on a Linux machine.
* 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`.
* 5434Kartik Agaram2019-07-211-0/+0
|
* 5433Kartik Agaram2019-07-211-0/+0
|
* 5429Kartik Agaram2019-07-201-0/+0
| | | | Fix CI.
* 5426Kartik Agaram2019-07-201-0/+0
|
* 5413Kartik Agaram2019-07-171-0/+0
| | | | | | | Bugfix twelve: ModR/M was being incorrectly computed. This is one of two problems with subx/examples/ex3, so no new passing examples.
* 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.
* .Kartik Agaram2019-07-131-0/+0
|
* .Kartik Agaram2019-07-131-0/+0
|
* start distinguishing table lookups from insertsKartik Agaram2019-07-101-0/+0
|
* zero out new rows returned by get-or-insertKartik Agaram2019-07-101-0/+0
|
* .Kartik Agaram2019-07-101-0/+0
| | | | | Another batch of incorrectly signed conditional jumps. (Follow-up to commit 5180.)
* mostly done with emit-outputKartik Agaram2019-07-091-0/+0
| | | | | Some nooks and crannies will need light final debugging with xxd, but emit-hex-output covers most of the logic.
* pull a couple more functions into subx-commonKartik Agaram2019-07-081-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.
* preserve truthiness of non-booleansKartik Agaram2019-07-081-0/+0
| | | | | Everywhere we check if something is true, we check it by comparing against 0, not 1.
* .Kartik Agaram2019-07-081-0/+0
| | | | style tweaks
* .Kartik Agaram2019-07-071-0/+0
| | | | reorg in subx-common.subx
* 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.
| * 5218Kartik Agaram2019-05-221-0/+0
| |
* | .Kartik Agaram2019-07-031-0/+0
| | | | | | | | Get 'assort.subx' working again.
* | 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
| |
* | initial draft of solution for 'compute-addresses'Kartik Agaram2019-06-281-0/+0
| | | | | | | | No trace statements yet, so we don't know if it works.
* | .Kartik Agaram2019-06-281-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
| |
* | .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.
* | .Kartik Agaram2019-05-261-0/+0
| |
* | 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.
* start of new syntax for segment headersKartik Agaram2019-05-171-0/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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