| Age | Commit message (Collapse) | Author |
|
Force-Push: yes
Change-Id: I07e8170c88952bd3d490341db777f4e102da4acd
|
|
and move the docs on the data structure to where that is
Force-Push: yes
Change-Id: I607f2f9ce354026f27a8c6cbba020e29342fe450
|
|
Force-Push: yes
Change-Id: I77f18bba4ec9e6e806d2987cc107723ef91db802
|
|
the structure will eventually be populated from a few places, but for now, the proof-of-concept installs a complex hook that runs only on the call to "allocate" done at the top of "label-loop".
the comment output code works: the metadata entries are output in the appropriate places in the dump! yay
Force-Push: yes
Change-Id: I15f20241e84b535c8407f9a190b22c9cb85227e6
|
|
and remove a stray semicolon (oops)
Force-Push: yes
Change-Id: I1b26410f5f461f9026637b5509de3912defcd784
|
|
Force-Push: yes
Change-Id: I1cde3ac2bfc10ccaa8be260a1a6a88684563ccf6
|
|
it had a baked-in assumption that the word was exactly eight bytes long, expressed in how it added the null terminator for stringcmp's benefit.
Force-Push: yes
Change-Id: I2a4f9967a3f564e16f163a22b70030a4bf938b5e
|
|
now there is no hardcoding of it anywhere
Force-Push: yes
Change-Id: Iaacbfb5fa07ded7e48075ba59f0bfdb9f9252cf4
|
|
since the recommended invocation to build Evocation (hehe) does the heavy lifting in interpreted mode, this required a new helper, allocate-string, which takes a string in the scratch space and properly allocates it so it won't be overwritten by future allocations
Force-Push: yes
Change-Id: Ia73612a65fd7c11af5fe110c573c23c16b777112
|
|
this will not be useful until read-to-buffer also does, but it's a step towards that
Force-Push: yes
Change-Id: Icf03088c9e52e427a5c130949e9ba85655d59044
|
|
no comments yet, of course. also no way to run it on evoke itself yet, due to the buffer thing.
Force-Push: yes
Change-Id: Ia1d7cc06bd3da59a5d272e1c04606c25d46acee5
|
|
this seemed worth checking in
Force-Push: yes
Change-Id: I6bd81497d83883e0961f46b9e77fde97d1cad661
|
|
quite a lot is implemented, but there is quite a lot still to go. at any rate it compiles cleanly and this seemed like a good point to check things in.
Change-Id: I634bb3b2f1b10702cf63cb73c0a995983b5041f2
Force-Push: yes
|
|
yay! that helps a lot
(as tempting as it was to keep doing it mentally forever...)
Force-Push: yes
Change-Id: I7a213bc46913d00f9a9d3f49bcb22bfed248a010
|
|
Force-Push: yes
Change-Id: I7a5f4033bf80dfd3754de564ab49233459a952c5
|
|
Force-Push: yes
Change-Id: I16f8271c2629270f65e58e3a642511745ce136c1
|
|
also due to @atax1a@infosec.exchange
Force-Push: yes
Change-Id: I2e7797772c31fb11decf2a9de65c0e802ca5697a
|
|
this worked by coincidence since it's only ever called in one place, to encode :eax, whose encoding happens to be 0. oops.
thanks to @atax1a@infosec.exchange for spotting this
Force-Push: yes
Change-Id: I4cddbcd370a5d0c7db2f8733431bfda388022a22
|
|
Force-Push: yes
Change-Id: If9584709d96ca98ed6e03d5987549df9eb357c33
|
|
Force-Push: yes
Change-Id: Ib47e3c68e08d286f01dddecfbd565f881b94f01f
|
|
Force-Push: yes
Change-Id: I5c0e7abaebb9388f7900dbae8bde1b1cd528ac32
|
|
(also see the one in input.e)
Force-Push: yes
Change-Id: I80910cfdb5e3de6f8b1db69a9c630a21b2f92f4a
|
|
they were not a very effective optimization in light of the log-load stuff
Force-Push: yes
Change-Id: Ie0b51dddfda2b44c986a078580cc15be88193755
|
|
Force-Push: yes
Change-Id: I5e8d8ae4a6e07c2dfa38abc7b19a962932a210bf
|
|
Force-Push: yes
Change-Id: I11f3eb1079d27a7306d6ed1e8e4b9fd6fb7d3a4a
|
|
Force-Push: yes
Change-Id: Ice00213f2e4b79f9aa44e6ccc5a70d951f7f762d
|
|
it's starting to get concerning how all this stuff needs to go in quine.asm but hopefully the hex transform will fix it
Force-Push: yes
Change-Id: I840e77c96fa0555bc01b9604d09f5ac4903d48bf
|
|
Force-Push: yes
Change-Id: I0940c0c21580e810716a5f61b95fd520c464ab9e
|
|
this makes it unambiguously a noun phrase
Force-Push: yes
Change-Id: Ibc24821d70aaf6bc88ae5bf5e864e5b4db94dae5
|
|
so the TODOs are unneeded
Force-Push: yes
Change-Id: I13d1316d22b52238076d6f17d05062671e4724e4
|
|
Force-Push: yes
Change-Id: I02af0267657cf21fcf4e4d79457645da42f6798d
|
|
that was surprisingly involved, but it feels like the right thing to do
Change-Id: Ia2f38c7278f4237cebd0435d27131fe32dbc3718
Force-Push: yes
|
|
and a useful example one ;)
this also involved fixing the failure cases in input.e to handle EINTR correctly. it required a lot of tracing, but now the expected state of the stack is much better commented for next time.
many thanks to @cks@mastodon.social who found code in the Go compiler which had the details of what's required in regard to the restorer, which made the whole thing work, and to @snowfox@tech.lgbt who did some experimental testing around the exact requirements. both those contributions are reflected in the documentation added with this CL. additional thanks to everyone who chimed in on the fedi thread, your comments kept us going!
Force-Push: yes
Change-Id: I97fd89426bf807df5565e011d3665f7e904fa138
|
|
this will be necessary to resume after running a signal handler. it had a bug where any error code other than ENOENT would be treated as a number of bytes read, resulting in a negative value for the buffer's logical length. amazingly this didn't crash, but it wasn't great.
anyway now that's all fixed
Force-Push: yes
Change-Id: I1c2b45d8efd531c121c5695cdf0cc74609c80547
|
|
it needed to be a zero-width assertion, performance notwithstanding
Force-Push: yes
Change-Id: I033e3671401041406c247dcffa6b244c40544fd7
|
|
at least it's a start :)
Force-Push: yes
Change-Id: I221a916c8d6ae5ac45c1d884232b31da89584ddc
|
|
also added some instructions it needed
Force-Push: yes
Change-Id: Ia35280e2696167eb0662a5c3a9dc47840438da56
|
|
this turns out to be fairly involved. hex bootstrap can't come fast enough ;)
Force-Push: yes
Change-Id: Ide5d2207d745ad07c40d3c9f457cd6b491bfbcf0
|
|
and the transformation alternates were masking that. oops.
Force-Push: yes
Change-Id: I52a273b83cc00acdf70a20f01aeffc7feee85c76
|
|
with this fix, the first-generation and second-generation builds are precisely identical
it was an unused codeword in the bootstrapped docol, under the label transform, which inadvertently had a value from the host address space. the fix required some creativity.
Force-Push: yes
Change-Id: I05b373b4231fa093454fa31891784de16d81bb18
|
|
so it's all just high-level flow control now, which makes it load in itself
the output isn't identical on the first self-compilation, but it converges on the second
with this, it is officially self-hosting. WOW.
Force-Push: yes
Change-Id: Ic14de1dae209b200cada269b07c3826c86fa494f
|
|
Force-Push: yes
Change-Id: I6cf15b4e37b66a04afd5af9dfd9cc3d5eb52b894
|
|
Force-Push: yes
Change-Id: I556334ea34157992d2b21306c941ad432cf41b4c
|
|
haven't checked if it can compile itself yet :)
Force-Push: yes
Change-Id: I144981a04f09ecd0e9150369663ae8115bd39bdd
|
|
only some of that actually works, but hey, it's a start
Force-Push: yes
Change-Id: Ib82beb695be1a18de8aaaf3040b7c632851c6002
|
|
doesn't work quite yet. close :)
Force-Push: yes
Change-Id: I71b6e788790fe2ca8e07dae95e9ad6e39d0664c0
|
|
not fully tried though
Force-Push: yes
Change-Id: I19b39f2b982fde66863c710b6d458c3bd12bdf4a
|
|
the word "variable" also needed special treatment, in the same way that "keyword" did. it's not immediately clear why.
Force-Push: yes
Change-Id: I15fae39b1b9ec928281150c76260940717b8e27a
|
|
see dynamic.e, input.e, interpret.e, and flow-control.e
there were a couple things in the log-load transform that need to work in compile mode, too
Force-Push: yes
Change-Id: I7caac3b9205f36f7e082a3fd280561d67e27942c
|
|
it's in dynamic.e for now
Force-Push: yes
Change-Id: I4d0c5917eccd58cb881850faee0728d786010c27
|