about summary refs log tree commit diff stats
path: root/subx/apps/pack.subx
Commit message (Collapse)AuthorAgeFilesLines
* 5458Kartik Agaram2019-07-221-29/+30
| | | | | | Ensure we don't create overly long lines. Now this works: $ ./diff_ntranslate 0*.subx apps/subx-common.subx
* 5448Kartik Agaram2019-07-221-6/+14
| | | | Make the output of the `pack` phase a little easier to read.
* 5413Kartik Agaram2019-07-171-4/+104
| | | | | | | Bugfix twelve: ModR/M was being incorrectly computed. This is one of two problems with subx/examples/ex3, so no new passing examples.
* .Kartik Agaram2019-07-081-20/+20
| | | | | Be more consistent about names of ends of a slice. (In the opposite direction compared to last night's 925fc490d2ce8b8d411de87bd0af5b3a8a704213.)
* .Kartik Agaram2019-07-081-7/+4
|
* pull a couple more functions into subx-commonKartik Agaram2019-07-081-989/+0
|
* .Kartik Agaram2019-07-081-21/+21
| | | | Be more consistent about names of ends of a slice.
* .Kartik Agaram2019-07-081-65/+96
| | | | | | 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.
* updates to survey - part of compute-offsets implementednc2019-07-031-246/+0
|
* .Kartik Agaram2019-06-121-5/+0
| | | | | Now that we don't have to edit code to run a single test, delete that commented out fragment everywhere.
* implement compute-widthnc2019-06-081-268/+0
|
* new primitive: parse-array-of-intsKartik Agaram2019-05-251-0/+9
| | | | | | | | | | 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.
* start of new syntax for segment headersKartik Agaram2019-05-171-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
* standardize function namesKartik Agaram2019-05-021-36/+36
| | | | | Operations on buffered-file now always include the word 'buffered'. More verbose, but hopefully this highlights holes in the library.
* 5105Kartik Agaram2019-04-161-172/+0
| | | | | Pull in a _different_ function than `next-word` (commit 5092) into a shared file between phases. Let's see how this goes.
* 5100Kartik Agaram2019-04-161-1/+1
|
* 5098Kartik Agaram2019-04-161-6/+6
|
* 5097Kartik Agaram2019-04-161-4/+5
|
* 5092Kartik Agaram2019-04-151-0/+245
| | | | | | | Realization: 'next-word' can't be reused in converting string literals, because it has to understand string literals. Let's just keep each phase self-contained.
* 5090Kartik Agaram2019-04-131-519/+103
| | | | | | | 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.
* 5080Kartik Agaram2019-04-111-36/+20
|
* 5074Kartik Agaram2019-04-101-115/+149
| | | | | | | | | | | | | 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.
* 5072Kartik Agaram2019-04-101-15/+1
|
* 5064Kartik Agaram2019-04-071-3/+2
|
* 5059Kartik Agaram2019-04-051-23/+23
|
* 5058Kartik Agaram2019-04-051-245/+0
|
* 5057Kartik Agaram2019-04-051-1/+35
|
* 5054Kartik Agaram2019-04-031-4/+3
|
* 5053Kartik Agaram2019-04-031-40/+266
| | | | | | 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.
* 5052Kartik Agaram2019-04-021-99/+127
|
* 5051 - done compiling SIB operandsKartik Agaram2019-04-021-3/+671
| | | | Done with pack.subx?!
* 5050 - compile ModR/M operandsKartik Agaram2019-04-021-1/+807
|
* 5049Kartik Agaram2019-04-021-100/+196
|
* 5048Kartik Agaram2019-04-011-12/+12
|
* 5047Kartik Agaram2019-04-011-3/+3
|
* 5046Kartik Agaram2019-04-011-72/+52
|
* 5045Kartik Agaram2019-04-011-8/+8
|
* 5044Kartik Agaram2019-04-011-3/+248
|
* 5043Kartik Agaram2019-04-011-0/+3
|
* 5042Kartik Agaram2019-03-311-33/+35
|
* 5041 - compile displacement operandsKartik Agaram2019-03-311-13/+565
|
* 5040 - compile immediate operandsKartik Agaram2019-03-301-16/+556
|
* 5039 - compile opcodesKartik Agaram2019-03-301-6/+1011
|
* 5038Kartik Agaram2019-03-291-11/+181
|
* 5037Kartik Agaram2019-03-291-13/+13
|
* 5036Kartik Agaram2019-03-291-34/+65
|
* 5034Kartik Agaram2019-03-291-50/+225
|
* 5029Kartik Agaram2019-03-281-49/+119
|
* 5028Kartik Agaram2019-03-281-5/+5
|
* 5027Kartik Agaram2019-03-271-11/+330
| | | | | | | | | 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.