| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
All extant SubX programs generate identical binaries using either the
C++ or the self-hosted SubX translators.
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Break a dependency from `print-int32` to `from-hex-char`.
|
| |
|
| |
|
| |
|
|
|
|
| |
Fix CI.
|
| |
|
|
|
|
|
| |
Various buffer sizes needed to be grown for ex11. But the next
bottleneck is that we need to code-generate run-tests.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Another batch of incorrectly signed conditional jumps. (Follow-up to
commit 5180.)
|
|
|
|
|
| |
Some nooks and crannies will need light final debugging with xxd, but
emit-hex-output covers most of the logic.
|
| |
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
Everywhere we check if something is true, we check it by comparing
against 0, not 1.
|
|
|
|
| |
style tweaks
|
|
|
|
| |
reorg in subx-common.subx
|
| |
|
|\
| |
| |
| |
| |
| | |
High time we pulled in the final changes to dquotes.
In the process we fix one recently introduced duplicate symbol.
|
| | |
|
|/| |
|
| | |
|
| | |
|
| |
| |
| |
| |
| | |
We need yet another helper for computing the lengths of strings, while
checking for escape sequences.
|
| |
| |
| |
| |
| |
| | |
We're going to be cloning it for the length computation.
Anytime we do something non-standard it's invariably short-lived.
|
| |
| |
| |
| | |
As expected, almost all tests now passing.
|
| | |
|
| |
| |
| |
| |
| | |
More importantly, don't mix reclaiming locals with discarding args after
a call.
|
| |
| |
| |
| | |
I _think_ we'll need to use it below. But may be wrong.
|
| |
| |
| |
| |
| | |
Kind of a pathological case, but makes our loop follow a standard format,
and provides some error checking at low cost.
|
| | |
|
| |
| |
| |
| | |
I was missing a test to catch this.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
I like to be able to jump between functions and tests using '}' in Vim
:)
We also shouldn't put the wrong argument types in the tabular columns.
Just make it obvious they're not in use when instructions don't have a
ModR/M byte.
End-of-line comments are really only useful for instructions with a ModR/M
byte.
|
| | |
|
| |
| |
| |
| | |
This one should make `emit-metadata` string-aware.
|
| |
| |
| |
| | |
Plan: https://github.com/akkartik/mu/commit/d4a244268841e8e912c98f4587095b701aa5c292#commitcomment-33558279
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Current state:
✓ hex.subx (no changes required)
survey.subx
✓ pack.subx (fixed here)
assort.subx
✓ dquotes.subx (has failing tests for other reasons)
|
|/
|
|
| |
Test for the bugfix of commit 2f49a27504.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|