[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]