0 | 0 |
SixtyPical
|
1 | 1 |
==========
|
2 | 2 |
|
3 | |
_Version 0.12. Work-in-progress, everything is subject to change._
|
|
3 |
_Version 0.13. Work-in-progress, everything is subject to change._
|
4 | 4 |
|
5 | 5 |
SixtyPical is a very low-level programming language, similar to 6502 assembly,
|
6 | 6 |
with static analysis through abstract interpretation.
|
|
43 | 43 |
This preserves them, so that, semantically, they can be used later even though they
|
44 | 44 |
are trashed inside the block.
|
45 | 45 |
|
46 | |
### Range checking in the abstract interpretation
|
47 | |
|
48 | |
If you copy the address of a buffer (say it is size N) to a pointer, it is valid.
|
49 | |
If you add a value from 0 to N-1 to the pointer, it is still valid.
|
50 | |
But if you add a value ≥ N to it, it becomes invalid.
|
51 | |
This should be tracked in the abstract interpretation.
|
52 | |
(If only because abstract interpretation is the major point of this project!)
|
53 | |
|
54 | |
Range-checking buffers might be too difficult. Range checking tables will be easier.
|
55 | |
If a value is ANDed with 15, its range must be 0-15, etc.
|
56 | |
|
57 | 46 |
### Re-order routines and optimize tail-calls to fallthroughs
|
58 | 47 |
|
59 | 48 |
Not because it saves 3 bytes, but because it's a neat trick. Doing it optimally
|
|
61 | 50 |
|
62 | 51 |
### And at some point...
|
63 | 52 |
|
|
53 |
* Confirm that `and` can be used to restrict the range of table reads/writes.
|
64 | 54 |
* `low` and `high` address operators - to turn `word` type into `byte`.
|
65 | 55 |
* `const`s that can be used in defining the size of tables, etc.
|
66 | 56 |
* Tests, and implementation, ensuring a routine can be assigned to a vector of "wider" type
|