[video member=pervognsen stream_platform=twitch project=bitwise title="Type Checking/Inference, Constant Evaluation" vod_platform=youtube id=-eCwBwTbjAI annotator=Miblo]
[0:13][Recap and set the stage for the day][:speech]
[0:47][Explain why the approach to ordering the dependency graph implemented on the last stream didn't work][:parsing :research]
[5:17][Describe the new approach, installing and resolving entities][:parsing :research]
[10:47][The new ingredient: the notion of incomplete types, much like C][:parsing :research]
[12:09][Describe complete_type() and related functions, with usage examples][:parsing :research]
[16:25][Describe resolve_expr() and related functions][:parsing :research]
[20:44][Show how it ends up working][:parsing :run]
[25:24][Note the pleasant absence of on-demand dependency resolution][:parsing :research]
[26:57][Q&A][:speech]
[27:22][@ws_ubi][@pervognsen Are you recording the videos so I could watch it later?]
[27:55][Summarise our notion of incomplete types, and its difference from that of C][:parsing :research]
[28:37][@orcnz29][@pervognsen Would you be able to push the code you just explained?]
[29:06][Commit "Code for day 8 prestream"][:admin]
[29:50][@dr_kegel][Only one question where you asserted on lvalue only expr and you return a token-rvalue, I think it was a deref][:parsing]
[30:50][Consider enabling the type resolver to handle compound literals][:parsing :speech]
[32:28][Introduce resolve_expr_compound()][:parsing]
[39:02][:Run it to see that it works][:parsing :run]
[39:06][Add an incorrect type test in resolve_test()][:parsing]
[39:24][:Run it to see that this gets caught][:parsing]
[39:32][Add tests in resolve_test() for fewer and more arguments provided in a compound literal declaration than there are values in the type][:parsing]
[39:52][:Run it to see that it works as expected][:parsing]
[40:06][Enable resolve_expr_compound() to handle arrays][:parsing]
[44:04][:Run it to see that it works as expected][:parsing]
[44:26][Add a test for arrays in resolve_test()][:parsing]
[44:35][:Run it and crash in resolve_expr_compound()][:parsing]
[44:46][Fix the crash in resolve_expr_compound(), double-check that it's correct and rewrite the compound literal array test case in resolve_test()][:parsing]
[47:33][:Run it to see that that does the trick][:parsing]
[47:42][Add tests in resolve_test() for fewer and more arguments provided in a compound literal array declaration than there are values in the type][:parsing]
[47:58][:Run it to see that it works][:parsing]
[48:06][Add a test in resolve_test() that types unify][:parsing]
[48:28][:Run it to see that it works][:parsing]
[48:36][Enable resolve_expr_compound() to handle expected types][:parsing]
[56:17][Add a test of our expected type code in resolve_test()][:parsing]
[56:44][Step through resolve_expr_compound() to see how it handles our expected type][:parsing :run]
[57:26][Add an expected struct type test in resolve_test()][:parsing]
[57:40][:Run it to see that it works][:parsing]
[58:16][Add a test for unhandled resolving of expected function arguments in resolve_test()][:parsing]
[59:55][:Run it to see that it parses but doesn't resolve][:parsing]
[1:00:13][Introduce resolve_decl_func()][:parsing]
[1:03:08][:Run it to see that it correctly resolves the function declaration][:parsing]
[1:03:57][Introduce resolve_expr_call()][:parsing]
[1:12:23][Add function call tests in resolve_test(), and find that they work][:parsing :programming :run]
[1:14:19][Note that we're not yet traversing the function body, and recap the day's work][:parsing :speech]
[1:15:48][Q&A][:speech]
[1:17:31][A few words on type inference][:parsing :speech]
[1:18:02][@buzzfizz64][@pervognsen What’s the expected type thing again? I missed it][:parsing]
[1:19:58][How C handles expected types][:language :parsing :speech]
[1:21:53][Passing separate data vs packed structs in C][:language :speech]
[1:23:52][Wrap up the main stream][:speech]
[/video]
