| Age | Commit message (Collapse) | Author |
|
Force-Push: yes
Change-Id: Icf69cdfe7cf31fda07031bbc848c3ce2acb8cca1
|
|
Force-Push: yes
Change-Id: I352537e52cb12d1c96f84cdaa794bd854d8ab1aa
|
|
Force-Push: yes
Change-Id: Iba125ccfd005151822d31af050ea3b4e2907d853
|
|
the cold-start routine needs it...
Force-Push: yes
Change-Id: I6c0d80fc2bbb634f4b25aa96bd4ed5351361b8c9
|
|
it was time. it was really impressively broken without one.
Force-Push: yes
Change-Id: Id26c551dcf43b37577ac96796627b6658a040cf4
|
|
the documentation in labels.e is entirely new, synthesized from informal private discussions.
this is also intended as a final pass to make sure all the comments and nuances in the ELF code from quine.asm are incorporated in elf.e.
also this uses the new `L@'` and `L!'` facilities for terseness
Force-Push: yes
Change-Id: Ieabb2bb26f4b83260f0072dcdcd0950f9aa9fab2
|
|
wow it feels strange having a clear meaning associated with line noise like that
Force-Push: yes
Change-Id: If3d101234a9b8798c88f6b90090479b2866f5406
|
|
nice, right? :) modular programming! :D
Force-Push: yes
Change-Id: I56dd219fd2147850a0bb5b4a8cb3f9760e787215
|
|
yay
this is everything important that flatassembler was doing for us, so now it's time to rewrite Evocation itself, wow!
Force-Push: yes
Change-Id: Ifc2a901801d3edcc6d81b063a0a7c3efacdd255e
|
|
wow did labels turn out to be handy
Force-Push: yes
Change-Id: Iba8d57aed2e5baab5df44b94cdc1d57891b846a9
|
|
it doesn't actually resolve their real values yet though
Change-Id: Ib8fa0f73dfa37ec9e593f5cf17adc825a42ba53b
Force-Push: yes
|
|
this fixes a "bug" where a "~" as the last thing on a line would comment the following line
this is a user-visible API change, but the only thing that needed to be modified right now was s"
Force-Push: yes
Change-Id: Iad062581dfdd8603ab75d58b1ca304ea6eb55c37
|
|
Change-Id: I203ec08f02bff6f3fc7c82e359941449ca02a04c
Force-Push: yes
|
|
also some important TODOs have been discovered
Force-Push: yes
Change-Id: I8efe7d0074700d6f5c78d4a591e5b590f57f47a9
|
|
this is re-tracing some steps from way back in the beginning, to see what they look like in a post-flatassembler context :)
it doesn't, like, do anything yet, other than print out some introspection
Force-Push: yes
Change-Id: I8913edffc075de313870367ef56278b1c8f50a06
|
|
Force-Push: yes
Change-Id: I19a63a15b0058393719c0903bcabbb9b1389e2a1
|
|
Force-Push: yes
Change-Id: Ifda674d7bdd6243bf879ad5964b56791c6f33b90
|
|
that was easy :)
Force-Push: yes
Change-Id: I43933b373566d83e1c8a7dd12f5e7d203952fcc2
|
|
yay
they use C-style syntax. also, the number lexing code is better organized now.
Force-Push: yes
Change-Id: Ibe28ba553e4970e76eb562dddd4e2387ba0090f4
|
|
also .", which reads a string and prints it immediately
Force-Push: yes
Change-Id: I70ed0aea25d79b45ff11f587a8ff328d5dc28db3
|
|
Force-Push: yes
Change-Id: I1939d287b4aa2d7e17d60d9af67dc41049847a6e
|
|
the word "key" is now implemented in terms of the new "key-from", to give a way to work with buffers other than the main one
Force-Push: yes
Change-Id: Ib62ed8c7890611a552b0ce6c2a2b8610092e1b6e
|
|
it's not hooked up to the read logic yet, and some of the finicky cases aren't fully tested yet because it will be necessary to alternate reads and refills a bit to exercise them.
Force-Push: yes
Change-Id: Ic7442787068ea4ae985832ae597531d7d7bdcea9
|
|
this avoids the problem where there's no way to represent most entirely-full states because they would be the same as the empty states
Force-Push: yes
Change-Id: Ia38a57d756b62ad1c8301603cb9d9a99f2a1dbc4
|
|
it's easier to remember that way
Force-Push: yes
Change-Id: I205a49a03209c882eab80db7296d502bfcb206d9
|
|
Force-Push: yes
Change-Id: I28ccd83524de7baeaaf9e942006a892d7411c2aa
|
|
also, an important fix for string literals that matters inside curly braces
Force-Push: yes
Change-Id: Ia32d827a830e3ec847e5b8898e1c4a23e475e43b
|
|
Force-Push: yes
Change-Id: Ie797f38a0b83096a960d1f0019f5322a1f7884c3
|
|
still needs character visualization
also implement ndup ndrop and some similar stuff
Force-Push: yes
Change-Id: I8f0ccdc9643afcd5b9a216b835b74c2c729d1d12
|
|
heresy etc etc
Force-Push: yes
Change-Id: I3ba75447d9a5f67c8739bed82826ac04e5d952ad
|
|
I'm reimplementing it, instead of hooking into the early implementation, because it's just SO much easier to read in the real syntax. also it's not really needed during bootstrapping, so probably that one can eventually be removed.
Force-Push: yes
Change-Id: If3d25eba1b280e14ee418d86d5098efcc069a529
|
|
this ensures we don't accidentally use it going forward
Force-Push: yes
Change-Id: Id2ae7248d25f4090540a7ca795f13e0523f24c74
|
|
Force-Push: yes
Change-Id: I170967f44d9256c49716866afd39e0ab3b6d992a
|
|
yay!
Force-Push: yes
Change-Id: I07aaeb486bf448ed736bd86ea5e495731a1da732
|
|
yay. that went faster than "if" did.
Force-Push: yes
Change-Id: Iba1c2867eed48f483928eafe9a5f90f547715bde
|
|
we decided to do flow control in a fun suffix-y way. so we introduced words { and } which track code blocks while compiling them, and the new word "if" uses memmove to slide that block around to insert a branch before it.
memmove is also new, implemented in flatassembler
also "if" relies on "'" which itself wants to be able to quote the word "lit", so the flatassembler word "literal" is introduced to break the cycle
Force-Push: yes
Change-Id: Iff17a15a1e748fe536e73ad05b1d4b06725a9f78
|
|
this is a real milestone, wow.
this required changing a few things in "interpret".
first and simplest, it wasn't properly dropping the word string when processing a number in compile mode.
second, "word" wasn't properly skipping whitespace - it was still becoming part of the word, which resulted in lookup failures.
third and most interesting, "interpret" no longer loops, it relies on "quit" to do that. that means that instead of cold_start handing off to "interpret" as it previously did, cold_start now hands off to a trampoline it creates that calls "interpret" just enough times to create and invoke "quit".
Force-Push: yes
Change-Id: Iff826c6ef7e58c1e014688ae7508ab13e89c3c28
|
|
these are the idiomatic Forth words [, ], :, and ;. also, comma already existed.
an example of defining and calling a word at runtime is in the boot source
Force-Push: yes!!!!!
Change-Id: I5e5f66649616d9928600482fb7e504cd8bfe0d48
|
|
heh, ironic and stuff
Force-Push: yes
Change-Id: I607ac3b158c4ac6d3475727b278a4570e4570220
|
|
yeahhhhhhh the strings tried to grow downwards in memory. strings don't do that.
on the plus side, the new implementation feels way more elegant.
Force-Push: yes
Change-Id: I836e1348273035299afbd3a793a77327180666f0
|
|
it's not used yet; this uncovered a problem with the stack string buffers, which needs to be fixed first. they grow in the wrong direction.
Force-Push: yes
Change-Id: I208897f9008d956996493b28fff831e04a67a366
|
|
this was done with early_describe_all, as before. both word addresses and string addresses were checked.
there were a couple fixes needed to make that run properly; they have been applied
Force-Push: yes
Change-Id: Idb89d04ab0deb42ef14220b2ef0e958657d75c63
|
|
oops :)
so the no-such-word error condition can happen now, which is good
Force-Push: yes
Change-Id: If0095253c0c247ea7ff13a9b6b49a5698ef8243f
|
|
only decimal tho
Force-Push: yes
Change-Id: I79cfbdee7beb927855e1b32869ac760754af062d
|
|
Force-Push: yes
Change-Id: I2c7eb0c842c930be17bdff2d0e270c53fb996f86
|
|
well, sort of. no literals yet.
Force-Push: yessssssss!!!
Change-Id: I91156554934659ea285cf18def5ed66ce09a1171
|
|
sweeeeeeeet
nearly there now
also, fetch8 (aka 8@) and the 16- and 32-bit equivalents never actually returned their results. oops. fixed.
Force-Push: yes
Change-Id: I35e48036951e829625cc37ce99d789e97d98100b
|
|
by putting this directly on the heap, we allow it to work in the easy, obvious ways, at the cost of extreme verbosity.
the core abstractions here are "buffer", "input buffer", and "buffer metadata". the metadata struct is distinct from the backing store, though there is a convenience word to allocate them together. for communication purposes, the buffer "is" the metadata struct, and the "backing store" is where things are actually read from. all input buffers are buffers but someday not all buffers will be input buffers; note carefully how the various word names make this distinction.
Force-Push: yes
Change-Id: Ib85a74af046b42c8959c6edf93b83e2ad7f21be4
|
|
wow!!!!!
the next step is implementing the Forth lexer. wow!
Force-Push: yes
Change-Id: If847c1d7b3949f7d449279e0783021484f96e6a8
|
|
the words that needed fixes were unroll, stringlen, 0branch, and sys-exit
this is now everything that's expected to agree, we're pretty sure
the disassemblies of litpack* contain absolute addresses of the corresponding pack* words, so those are expected to be different, and the differences look correct at the byte level
similarly, the implementation of docol is significantly different structurally and that's also expected
Force-Push: yes
Change-Id: I0028fb00b4ce51a7f7c608a3153323cf4a2e5a25
|