about summary refs log tree commit diff stats
path: root/apps/survey
Commit message (Collapse)AuthorAgeFilesLines
* handle nulls in lookupKartik Agaram2020-05-181-0/+0
| | | | | | | | | Cleaner abstraction, but adds 3 instructions to our overhead for handles, including one potentially-hard-to-predict jump :/ I wish I could have put the alloc id in eax for the comparison as well, to save a few bytes of instruction space. But that messes up the non-null case.
* support 'fake' handles allocated staticallyKartik Agaram2020-05-181-0/+0
| | | | | | | | Mystery solved of why the syntax sugar phases don't work even though they don't use any functions whose signatures changed in the migration to handles. The answer: they use the Registers table, and it needs to use handles rather than raw strings.
* support 'fake' handles allocated staticallyKartik Agaram2020-05-181-0/+0
| | | | | | | | | | | | | | | | | | | | | | Mystery solved of why the syntax sugar phases don't work even though they don't use any functions whose signatures changed in the migration to handles. The answer: they use the Registers table, and it currently doesn't use handles. Rather than create a whole new set of functions that operate on addresses, I'm going to create fake handles that are never intended to be reclaimed. Which raises the question of the best way to do that. I'd like to continue using string syntax, so I'm going to use a prefix in the payload that can also be rendered as a string. But all the printable characters start with 0x20, and we don't currently have escape sequences for null or any other non-printable characters. I _could_ use newlines, but that seems overly clever. So instead I'll once again not worry about some hypothetical problem with running out of alloc-ids, and just carve out half of the id space that can't be used for real alloc ids. Ascii doesn't use the most significant bit of bytes, so it seems like a natural separation.
* fix a discrepancy in the generated apps/ex1 binaryKartik Agaram2020-05-181-0/+0
|
* fix a crash when translating apps/ex1Kartik Agaram2020-05-181-0/+0
|
* Rebuild phases of self-hosted SubX translatorKartik Agaram2020-05-181-0/+0
| | | | For this one commit we need to bootstrap ourselves with subx_translate_debug.
* 6208Kartik Agaram2020-04-221-0/+0
|
* 6198Kartik Agaram2020-04-081-0/+0
|
* 6197Kartik Agaram2020-04-081-0/+0
|
* 6196Kartik Agaram2020-04-061-0/+0
|
* 6195Kartik Agaram2020-04-061-0/+0
| | | | This bug was never caught because we've never tested with more than 2 segments.
* 6194Kartik Agaram2020-04-061-0/+0
|
* 6193Kartik Agaram2020-04-061-0/+0
|
* 6192Kartik Agaram2020-04-061-0/+0
|
* 6191Kartik Agaram2020-04-061-0/+0
|
* 6189Kartik Agaram2020-04-061-0/+0
|
* 6187Kartik Agaram2020-04-061-0/+0
|
* 6186Kartik Agaram2020-04-061-0/+0
|
* 6182 - start of support for safe handlesKartik Agaram2020-04-031-0/+0
| | | | | | | | | | | | | | So far it's unclear how to do this in a series of small commits. Still nibbling around the edges. In this commit we standardize some terminology: The length of an array or stream is denominated in the high-level elements. The _size_ is denominated in bytes. The thing we encode into the type is always the size, not the length. There's still an open question of what to do about the Mu `length` operator. I'd like to modify it to provide the length. Currently it provides the size. If I can't fix that I'll rename it.
* 6181Kartik Agaram2020-04-031-0/+0
|
* 6180Kartik Agaram2020-04-031-0/+0
| | | | | It's going to be hard work retrofitting 8-byte handles in place of 4-byte addrs. Here we just clean up some unused args.
* 6153 - switch 'main' to use Mu stringsKartik Agaram2020-03-151-0/+0
| | | | | | | | | | | At the SubX level we have to put up with null-terminated kernel strings for commandline args. But so far we haven't done much with them. Rather than try to support them we'll just convert them transparently to standard length-prefixed strings. In the process I realized that it's not quite right to treat the combination of argc and argv as an array of kernel strings. Argc counts the number of elements, whereas the length of an array is usually denominated in bytes.
* 6094 - new 'compute-offset' instructionKartik Agaram2020-03-071-0/+0
| | | | | | | | | | | | | | | | | | | | | | | If indexing into a type with power-of-2-sized elements we can access them in one instruction: x/reg1: (addr int) <- index A/reg2: (addr array int), idx/reg3: int This translates to a single instruction because x86 instructions support an addressing mode with left-shifts. For non-powers-of-2, however, we need a multiply. To keep things type-safe, it is performed like this: x/reg1: (offset T) <- compute-offset A: (addr array T), idx: int y/reg2: (addr T) <- index A, x An offset is just an int that is guaranteed to be a multiple of size-of(T). Offsets can only be used in index instructions, and the types will eventually be required to line up. In the process, I have to expand Input-size because mu.subx is growing big.
* 6085Kartik Agaram2020-03-061-0/+0
| | | | Support parsing ints from strings rather than slices.
* 6083Kartik Agaram2020-03-061-0/+0
|
* 6070Kartik Agaram2020-02-291-0/+0
|
* 6064Kartik Agaram2020-02-271-0/+0
| | | | Fix CI.
* 6000 - clean up after no-local branchesKartik Agaram2020-02-091-0/+0
|
* 5999Kartik Agaram2020-02-091-0/+0
| | | | | Fix CI. apps/survey was running out of space in the trace segment when translating apps/mu.subx
* 5948 - branching to named blocksKartik Agaram2020-01-291-0/+0
|
* 5933Kartik Agaram2020-01-271-0/+0
| | | | Expand some buffer sizes to continue building mu.subx natively.
* 5898 - strengthen slice-empty? checkKartik Agaram2020-01-191-0/+0
| | | | | | | | | | | Anytime we create a slice, the first check tends to be whether it's empty. If we handle ill-formed slices here where start > end, that provides a measure of safety. In the Mu translator (mu.subx) we often check for a trailing ':' or ',' and decrement slice->end to ignore it. But that could conceivably yield ill-formed slices if the slice started out empty. Now we make sure we never operate on such ill-formed slices.
* 5887 - reorganize libraryKartik Agaram2020-01-141-0/+0
| | | | | | | Layers 0-89 are used in self-hosting SubX. Layers 90-99 are not needed for self-hosting SubX, and therefore could use transitional levels of syntax sugar. Layers 100 and up use all SubX syntax sugar.
* 5847 - literal inputsKartik Agaram2019-12-311-0/+0
|
* 5804Kartik Agaram2019-12-081-0/+0
| | | | | Try to make the comments consistent with the type system we'll eventually have.
* 5803Kartik Agaram2019-12-071-0/+0
|
* 5792Kartik Agaram2019-12-051-0/+0
| | | | | Fix a bug in one test: it checks eax when the component under test returns nothing. It's been just accidentally passing all these months.
* 5782 - fix a widespread bug with Heap-sizeKartik Agaram2019-11-301-0/+0
|
* 5778Kartik Agaram2019-11-291-0/+0
|
* 5769 - support uppercase hex in SubXKartik Agaram2019-11-281-0/+0
|
* 5765Kartik Agaram2019-11-261-0/+0
| | | | | | | | | A couple more primitives now working. In the process I ran into an issue with some buffer filling up when running ntranslate. Isolating it to survey.subx was straightforward, but --trace ran out of RAM, and --trace --dump ran out of (7GB of) disk. In the end what helped was just repeatedly inserting exits at different points, and I realized there was a magic number that hadn't been turned into a named constant.
* 5752Kartik Agaram2019-11-181-0/+0
| | | | | | | Support binary operations with reg/mem and reg operands. Everything is passing. However, the self-hosting translator now generates some discrepancies compared to the C++ translator :(
* 5715Kartik Agaram2019-10-261-0/+0
| | | | | | | Clean up pseudocode to match planned syntax for the type- and memory-safe level-2 Mu language. http://akkartik.name/post/mu-2019-2 is already out of date.
* 5714Kartik Agaram2019-10-251-0/+0
| | | | Replace calculations of constants with labels.
* 5687Kartik Agaram2019-09-231-0/+0
| | | | | | | | | Move stack operations to a layer of their own. It was some short-term pain to take out the syntax sugar from it, but we need access to this layer from braces, which can't depend on sugar since it's part of sugar. Just simpler to keep one clear line and not have to build sometimes with some sugar but not others.
* 5676Kartik Agaram2019-09-191-0/+0
|
* 5675 - move helpers from subx-common into layersKartik Agaram2019-09-191-0/+0
| | | | | | | | | | | | | | | | This undoes 5672 in favor of a new plan: Layers 000 - 099 are for running without syntax sugar. We use them for building syntax-sugar passes. Layers 100 and up are for running with all syntax sugar. The layers are arranged in approximate order so more phases rely on earlier layers than later ones. I plan to not use intermediate syntax sugar (just sigils without calls, or sigils and calls without braces) anywhere except in the specific passes implementing them.
* 5673 - standardize a few knobsKartik Agaram2019-09-191-0/+0
|
* 5672 - move hex out of appsKartik Agaram2019-09-191-0/+0
|
* 5669Kartik Agaram2019-09-191-0/+0
|