[video member=pervognsen stream_platform=twitch project=bitwise title="RISC-V Static Assembler" vod_platform=youtube id=zd91F4_UdyE annotator=Miblo]
[0:00][Recap and set the stage for the day][:speech]
[0:54][Recommend the Annotated Episode Guide, and plug @Miblo's pledge page[ref
    site="The Life and Times of Miblo del Carpio"
    page="Cinera, and Annotation Writing"
    url=https://miblodelcarpio.co.uk/cinera/#pledge] and twitter[ref
        site=Twitter
        page="Miblo del Carpio"
        url=https://twitter.com/miblo_], and the forums[ref
            site="Bitwise Forums"
            page="Ion: Transitive imports of symbols"
            url=https://bitwise.handmade.network/forums/t/3126-ion__transitive_imports_of_symbols]][:speech]
[3:54][Roadmap for the next few weeks, working on a static RISC-V assembler and making the emulator more standalone][:asm :emulation :isa :speech]
[10:15][Plan to move on to :hardware design once we have the assembler and emulator][:speech]
[13:25][Review the work on the Reverse Polish Notation generator][:"code generation" :research]
[16:03][Demo the RPN calculator][:run]
[16:56][Explain the implementation of gen_rpn() and its :asm emittance][:"code generation" :research]
[26:28][Q&A][:speech]
[27:01][@voxygon][Is the ASCII assumed?]
[27:59][Setup to work on the static assembler, creating assembler.ion][:admin :asm]
[30:12][Static assembler][:asm :parsing :speech]
[32:10][Embark on the lexer, introducing the Lexer struct and next_token()][:parsing]
[39:52][Introduce scan_int() and adapt the whole lot of lex.c to Ion][:language :parsing]
[44:57][Organise the projects, pulling out test functions to test.ion][:admin]
[47:38][Introduce init_lexer() and lexer_test()][:parsing]
[49:22][Step through our lexer to see that it works][:parsing :run]
[50:02][Enable next_token() to handle EOF, and lexer_test() to print out the token kind][:parsing]
[52:19][:Run it to see that it handles types correctly][:parsing]
[53:10][Implement lexer_error()][:"error handling"]
[56:17][Test out our :"error handling"][:parsing :run]
[56:30][Make init_lexer() take a filename][:parsing]
[57:11][:Run it to see our filename][:parsing]
[57:35][Adapt scan_char() and related functions from lex.c to Ion][:language :parsing]
[1:04:31][Add a string test in lexer_test()][:parsing]
[1:05:29][Hit our assertion in the compiler's scan_str() due to a \\-escaped closing quote mark][:run]
[1:06:55][Remove that assertion from scan_str() to allow the compiler to throw an error instead][:parsing]
[1:08:07][:Run it to see that our lexer_test() works][:parsing]
[1:09:04][Implement stretchy buffers in Ion][:memory]
[1:19:30][Consult the C spec[ref
    author=ANSI
    title="ISO/IEC 9899: Information technology – Programming languages – C"
    url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf] to see if Ion could support the ternary operator][:language :research]
[1:20:28][Finish implementing Ion's stretchy buffers, noting differences from the C implementation][:language :memory]
[1:26:29][Enable scan_str() to use strbuf_push()][:memory]
[1:28:04][Make resolve_expr_binary_op() disallow pointer arithmetic on void* / 0-size elements][:parsing]
[1:30:36][Test if the streams parse correctly][:parsing :run]
[1:31:08][Test buffer regrowth][:memory :run]
[1:32:06][Reflect on our stretchy buffers in Ion][:memory :research]
[1:35:06][Adapt strbuf_printf() from C to Ion, and implement buf_fit() and strbuf_end()][:language :memory]
[1:40:51][Add a strbuf_printf() test to lexer_test()][:memory]
[1:41:50][:Run it to see that it looks reasonable][:memory]
[1:41:58][Stop the main stream here, with a few final thoughts on Ion's stretchy buffers and the lexer][:memory :parsing :speech]
[/video]
