about summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
* 4305Kartik Agaram2018-07-011-0/+4
|
* 4304Kartik Agaram2018-07-012-6/+6
|
* 4303 - subx: first real transformKartik Agaram2018-07-013-5/+79
| | | | We'll see if this is useful. Mostly just stretching our legs.
* 4302 - a more elaborate pass-through phaseKartik Agaram2018-06-302-3/+35
| | | | Starting to work out the skeleton every phase needs to have.
* 4301 - confirm that translation framework worksKartik Agaram2018-06-301-0/+8
| | | | All tests continue to pass after a trivial translation phase.
* 4300 - get set up to unit test translatorKartik Agaram2018-06-302-1/+5
|
* 4299Kartik Agaram2018-06-302-2/+2
|
* 4298 - framework for translating SubX programsKartik Agaram2018-06-302-8/+47
|
* 4297Kartik Agaram2018-06-301-0/+1
|
* 4296Kartik Agaram2018-06-301-0/+4
|
* 4295Kartik Agaram2018-06-301-1/+1
|
* 4294Kartik Agaram2018-06-301-9/+9
|
* 4293Kartik Agaram2018-06-301-1/+1
|
* 4292 - start a Vim syntax file for our 'language'Kartik Agaram2018-06-302-0/+26
| | | | | As we add high-level constructs we'll start labeling low-level constructs as unsafe, and highlighting them in red in our editor.
* 4291 - stop copying the ELF header into memoryKartik Agaram2018-06-304-8/+8
| | | | | | | No need for it once the program's loaded. And we keep programs from running the header as code. This also simplifies the header computation in the translator.
* 4290Kartik Agaram2018-06-301-2/+3
| | | | Clarify a few happy accidents.
* 4289 - beginnings of a translator to ELFKartik Agaram2018-06-305-4/+107
| | | | | The source 'language' is still entirely open. We'll see how it evolves as I write programs in machine code.
* 4288Kartik Agaram2018-06-282-1/+20
| | | | Give subx too the recent support for running a single test.
* 4287Kartik Agaram2018-06-281-1/+1
| | | | Fix CI. Looks like 'std::' sometimes doesn't work.
* 4286Kartik Agaram2018-06-281-25/+33
| | | | Make prints uniform.
* 4285Kartik Agaram2018-06-281-1/+1
|
* 4284 - implement first syscall for subxKartik Agaram2018-06-282-0/+20
| | | | Hopefully I won't need much more than exit, read and write.
* 4283Kartik Agaram2018-06-281-1/+1
|
* 4282 - subx now loads teensy/test4Kartik Agaram2018-06-281-13/+53
| | | | | We're now parsing the ELF spec more closely and better handling multiple program header table entries.
* 4281Kartik Agaram2018-06-281-3/+3
|
* 4280 - fix test program to use subx instructionsKartik K. Agaram2018-06-272-4/+7
| | | | | I don't know how to tell nasm to generate an imm32. It's a minor stepping-stone anyway; just emit the machine code directly.
* 4279 - load_elf() now working on teensy/test5Kartik K. Agaram2018-06-271-2/+2
| | | | Turns out it was an open question I never got around to answering.
* 4278 - load_elf() isn't actually working yetKartik Agaram2018-06-2711-0/+76
| | | | Here's a few test binaries generated on 32-bit Linux.
* 4277 - make room for a 'compile' sub-commandKartik Agaram2018-06-272-5/+10
|
* 4276 - switching gears to subxKartik Agaram2018-06-271-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | New plan: spend some time learning to program in machine code atop subx, relying solely on a tiny subset of kernel-provided syscalls. Gradually introduce helpers. Helpers we're sure we don't need, so far: a) Nested expressions b) Garbage collection c) One-size-fits-all memory allocation primitive d) Function overloading and generics Helpers we're sure we need, so far: a) Dependency-injected versions of syscalls b) Tangling directives c) Statically checked types Workflow for a C translator from ascii to binary: a) run generated machine code atop subx (unit tests probably go here) b) emit machine code packaged as an ELF file c) check that the ELF binary runs natively d) check that the ELF binary can be unwrapped and run atop subx This is different from a conventional compiler because the 'HLL' is unconstrained. It is also different from Forth given the emphasis on types. We want a simple stack that also encourages code sharing between programmers. Conventional languages grow monotonically complex. Forth discourages code sharing; it is non-trivial to figure out the 'shape' of data a strange function expects on the stack.
* 4275Kartik Agaram2018-06-252-0/+2
| | | | Fix CI.
* 4274Kartik Agaram2018-06-251-1/+1
| | | | Fix CI.
* 4273Kartik Agaram2018-06-251-0/+0
|
* 4272 - type-check variables in non-local spacesKartik Agaram2018-06-256-42/+87
| | | | | | So far we only checked if a single recipe used a variable with multiple types in any single space. Now we also ensure that the types deduced for a variable in a space are identical across recipes.
* 4271 - bugfix unrelated to alloc-idsKartik Agaram2018-06-252-2/+18
|
* 4270 - tweak the experimental concurrent builderKartik Agaram2018-06-252-17/+25
|
* 4269 - start validating alloc-ids on lookupKartik Agaram2018-06-243-5/+58
| | | | | | | | | | Seems incredible that this is all it took. Needs more testing. I also need to rethink how we organize our layers about addresses. Alloc-id stuff is scattered everywhere. The space for alloc-ids is perhaps unavoidably scattered. Just assume the layout from the start. But it seems bad that the scenario testing the lookup-time validation is in the 'abandon' layer when the code is in the 'lookup' layer.
* 4268 - add a simple validation of the alloc-idKartik Agaram2018-06-241-0/+9
| | | | Tautological for now since all alloc-ids are zero.
* 4267Kartik Agaram2018-06-241-4/+0
| | | | Drop a stray hunk that is obsoleted by 'deaddress'.
* 4266 - space for alloc-id in heap allocationsKartik Agaram2018-06-2436-648/+926
| | | | This has taken me almost 6 weeks :(
* 4265Kartik Agaram2018-06-1711-136/+136
| | | | Standardize use of type ingredients some more.
* 4264Kartik Agaram2018-06-1714-0/+0
| | | | Undo the relayout of 4259.
* 4263Kartik Agaram2018-06-173-41/+23
| | | | | Implement literal constants before type abbreviations, reducing some unnecessary tangling.
* 4262 - literal 'null'Kartik Agaram2018-06-1748-246/+268
|
* 4261 - start using literals for 'true' and 'false'Kartik Agaram2018-06-1748-368/+340
| | | | | | | | | They uncovered one bug: in edit/003-shortcuts.mu <scroll-down> was returning 0 for an address in one place where I thought it was returning 0 for a boolean. Now we've eliminated this bad interaction between tangling and punning literals.
* 4260 - make address coercions explicitKartik Agaram2018-06-167-21/+48
| | | | | 'deaddress' is a terrible name. Hopefully I'll come up with something better.
* 4259Kartik Agaram2018-06-1614-0/+0
|
* 4258 - undo 4257Kartik Agaram2018-06-1538-757/+381
|
* 4257 - abortive attempt at safe fat pointersKartik Agaram2018-06-1538-381/+757
| | | | | | | | | | | | | | | | I've been working on this slowly over several weeks, but it's too hard to support 0 as the null value for addresses. I constantly have to add exceptions for scalar value corresponding to an address type (now occupying 2 locations). The final straw is the test for 'reload': x:num <- reload text 'reload' returns an address. But there's no way to know that for arbitrary instructions. New plan: let's put this off for a bit and first create support for literals. Then use 'null' instead of '0' for addresses everywhere. Then it'll be easy to just change what 'null' means.
* 4256 - get rid of container metadata entirelyKartik Agaram2018-06-096-438/+84
| | | | | We have some ugly duplication in computing size_of on containers between layers 30/33 and 55.