[video member=pervognsen stream_platform=twitch project=bitwise title="Ion Version 0" medium=admin vod_platform=youtube id=Oeqeqw4OHPE annotator=Miblo]
[0:08][Recap yesterday's stream and set the stage for the day][:speech]
[2:03][Plan for this week, making some fun stuff in Ion, and setting homework][:language :speech]
[5:11][Super fast walkthrough of features added over the weekend, including multi-line strings, bitwise const and array pointer-decay][:"code generation" :language :parsing :research]
[12:37][Review the work implementing basic enum support, pointer arithmetic and control-flow analysis][:"code generation" :language :parsing :research]
[15:48][Review the work implementing control-flow analysis, uncovering a bug][:"code generation" :language :parsing :research]
[18:14][Fix gen_stmt() to correctly handle the STMT_SWITCH case][:"code generation" :language :parsing :programming]
[19:04][:Run it to see that it works now, along with the control-flow analysis][:"code generation" :language :parsing]
[21:07][Review the implementation of C-style null pointers][:"code generation" :language :parsing :research]
[22:12][Q&A][:speech]
[22:33][@badflydog][@pervognsen Do you plan on supporting a \@complete note on switch statements that requires a case for all enums][:language]
[24:25][Set the Homework: Choose-Your-Own-Adventure Compiler Hacking][:"code generation" :language :parsing]
[26:39][Homework: Use of a function return value in if() statements][:"code generation" :language :parsing]
[32:51][Homework: Use of a function return value in while() loops][:"code generation" :language :parsing]
[34:42][Homework: Defer statements][:"code generation" :language :parsing]
[43:27][High-level overview of a "defer" handling implementation][:"code generation" :language :parsing]
[49:32][Q&A][:speech]
[50:46][@artexx2000][@pervognsen So defer can be statement block?][:"code generation" :language :parsing]
[51:59][A few words on the utility of the homework tasks][:"code generation" :language :parsing :speech]
[53:14][Determine to make applications and libraries in Ion][:language :library :speech]
[56:23][Download SDL2[ref
    site="Simple DirectMedia Layer"
    page="SDL version 2.0.8 (stable)"
    url=https://www.libsdl.org/download-2.0.php] and create a new project "noir" including SDL][:library]
[1:02:49][Initialise an SDL context[ref
    site="SDL Wiki"
    page=SDL_Init
    url=https://wiki.libsdl.org/SDL_Init]][:library :programming]
[1:09:21][@badflydog][@pervognsen I believe you have to set the system console for the project. Under linker in options]
[1:10:16][Set that SubSystem]
[1:12:32][@twicetimes][@pervognsen 'Platform' has gone back to 'win32' in that menu]
[1:12:38][Set that SubSystem for all platforms]
[1:12:50][Create an SDL window[ref
    site="SDL Wiki"
    page=SDL_CreateWindow
    url=https://wiki.libsdl.org/SDL_CreateWindow]][:library :programming]
[1:14:35][:Run it, try to break into our program and experience MSVC's synchronous downloading of symbols]
[1:16:14][:Run it to see our SDL window]
[1:16:17][Enable our program to process keyboard input[ref
    site="SDL Wiki"
    page=SDL_GetKeyboardState
    url=https://wiki.libsdl.org/SDL_GetKeyboardState][ref
        site="SDL Wiki"
        page=SDL_PumpEvents
        url=https://wiki.libsdl.org/SDL_PumpEvents]][:"input handling" :library :programming]
[1:18:09][:Run it and again experience MSVC's synchronous downloading of symbols, this time for for twinapi.dll, twinapi.appcode.dll, rmclient.dll and bcrypt.dll][:library]
[1:18:46][Buffer up the keyboard input events and only print events that don't match the previous one, introducing KeyState struct and update_key_state()][:"input handling" :library :memory :programming]
[1:25:16][:Run it to find that it works][:"input handling" :library]
[1:25:25][Round up the main stream with a few additional words on the homework][:speech]
[/video]
