More Order-Independent Declarations
?
?
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus
Keyboard Navigation
Global Keys
[, < / ], > Jump to previous / next episodeW, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)
Menu toggling
q Quotes r References f Filter y Link c CreditsIn-Menu Movement
a
w
s
s
d
h
j
k
l
←
↑
↓
↓
→
Quotes and References Menus
Enter Jump to timecodeQuotes, References and Credits Menus
o Open URL (in new tab)Filter Menu
x, Space Toggle category and focus nextX, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus
Filter and Link Menus
z Toggle filter / linking modeCredits Menu
Enter Open URL (in new tab)⏫
Previous: 'Order-Independent Declarations'
⏫
0:08Recap and set the stage for the day, with a plug of the GitHub commits newly tagged by day and the annotated episode guide
🗩
0:08Recap and set the stage for the day, with a plug of the GitHub commits newly tagged by day and the annotated episode guide
🗩
0:08Recap and set the stage for the day, with a plug of the GitHub commits newly tagged by day and the annotated episode guide
🗩
3:45Review off-stream work on buf__printf(), the Typespec struct and AST_DUP()
📖
3:45Review off-stream work on buf__printf(), the Typespec struct and AST_DUP()
📖
3:45Review off-stream work on buf__printf(), the Typespec struct and AST_DUP()
📖
8:08Review the current status of order-independent declaration support, with the determination to redo it handling ordering first
📖
8:08Review the current status of order-independent declaration support, with the determination to redo it handling ordering first
📖
8:08Review the current status of order-independent declaration support, with the determination to redo it handling ordering first
📖
13:41Introduce order_decl() and order_typespec()
13:41Introduce order_decl() and order_typespec()
13:41Introduce order_decl() and order_typespec()
23:52Introduce order_expr() and order_name()
23:52Introduce order_expr() and order_name()
23:52Introduce order_expr() and order_name()
31:54Introduce order_test()
31:54Introduce order_test()
31:54Introduce order_test()
33:56Run it and hit a syntax error
🏃
33:56Run it and hit a syntax error
🏃
33:56Run it and hit a syntax error
🏃
34:22Pull out code_decls[i] into a variable in order_test()
34:22Pull out code_decls[i] into a variable in order_test()
34:22Pull out code_decls[i] into a variable in order_test()
35:07Step in to order_test() and realise that it calls parse_decl() incorrectly
🏃
35:07Step in to order_test() and realise that it calls parse_decl() incorrectly
🏃
35:07Step in to order_test() and realise that it calls parse_decl() incorrectly
🏃
35:29Make order_test() call init_stream()
35:29Make order_test() call init_stream()
35:29Make order_test() call init_stream()
35:44Run it to see how it works
🏃
35:44Run it to see how it works
🏃
35:44Run it to see how it works
🏃
35:55Make every function that doesn't need an argument take void as an argument
35:55Make every function that doesn't need an argument take void as an argument
35:55Make every function that doesn't need an argument take void as an argument
37:44Introduce order_decls()
37:44Introduce order_decls()
37:44Introduce order_decls()
40:27Step into order_decls() to see what's going on
🏃
40:27Step into order_decls() to see what's going on
🏃
40:27Step into order_decls() to see what's going on
🏃
40:41Make order_decls() call order_name()
40:41Make order_decls() call order_name()
40:41Make order_decls() call order_name()
41:04Step through order_decls()
🏃
41:04Step through order_decls()
🏃
41:04Step through order_decls()
🏃
41:34Prevent main_test() from calling resolve_test()
41:34Prevent main_test() from calling resolve_test()
41:34Prevent main_test() from calling resolve_test()
42:15Step back through order_test()
🏃
42:15Step back through order_test()
🏃
42:15Step back through order_test()
🏃
42:18Add a variable-based declaration test case in order_test()
42:18Add a variable-based declaration test case in order_test()
42:18Add a variable-based declaration test case in order_test()
42:29Step in to order_decl() and inspect the decl
🏃
42:29Step in to order_decl() and inspect the decl
🏃
42:29Step in to order_decl() and inspect the decl
🏃
43:18Add an out-of-order test case in order_test()
43:18Add an out-of-order test case in order_test()
43:18Add an out-of-order test case in order_test()
43:25Step recursively through order_decl() to see what it does
🏃
43:25Step recursively through order_decl() to see what it does
🏃
43:25Step recursively through order_decl() to see what it does
🏃
44:42Add a cyclical declaration test case in order_test()
44:42Add a cyclical declaration test case in order_test()
44:42Add a cyclical declaration test case in order_test()
44:52Step through order_decl() to see how it handles it
🏃
44:52Step through order_decl() to see how it handles it
🏃
44:52Step through order_decl() to see how it handles it
🏃
45:18Add struct test cases in order_test()
45:18Add struct test cases in order_test()
45:18Add struct test cases in order_test()
46:29Step in to order_decl() to see how it parses our structs
🏃
46:29Step in to order_decl() to see how it parses our structs
🏃
46:29Step in to order_decl() to see how it parses our structs
🏃
47:02Introduce sym_builtin() to handle things like "int" in structs
47:02Introduce sym_builtin() to handle things like "int" in structs
47:02Introduce sym_builtin() to handle things like "int" in structs
49:16Run it to see how it handles our structs
🏃
49:16Run it to see how it handles our structs
🏃
49:16Run it to see how it handles our structs
🏃
50:20Add an out-of-order declared struct member test case
50:20Add an out-of-order declared struct member test case
50:20Add an out-of-order declared struct member test case
50:47Run it to see how that works
🏃
50:47Run it to see how that works
🏃
50:47Run it to see how that works
🏃
51:09Review the core of our algorithm, with the determination to handle pointers
📖
51:09Review the core of our algorithm, with the determination to handle pointers
📖
51:09Review the core of our algorithm, with the determination to handle pointers
📖
56:33Plan not to detect cycles in the ordering pass
🗩
56:33Plan not to detect cycles in the ordering pass
🗩
56:33Plan not to detect cycles in the ordering pass
🗩
58:58Q&A
🗩
58:58Q&A
🗩
58:58Q&A
🗩
1:02:28Consider the cases preventing us from not ordering into pointer declarations
🗩
1:02:28Consider the cases preventing us from not ordering into pointer declarations
🗩
1:02:28Consider the cases preventing us from not ordering into pointer declarations
🗩
1:05:51Validate Sean's cases
🏃
🖮
1:05:51Validate Sean's cases
🏃
🖮
1:05:51Validate Sean's cases
🏃
🖮
1:06:46Consider implementing enum parsing
🗩
1:06:46Consider implementing enum parsing
🗩
1:06:46Consider implementing enum parsing
🗩
1:11:19Implement enum support, introducing a SymKind enum for all of our sym_*() functions, including a new sym_enum_const(), to use
1:11:19Implement enum support, introducing a SymKind enum for all of our sym_*() functions, including a new sym_enum_const(), to use
1:11:19Implement enum support, introducing a SymKind enum for all of our sym_*() functions, including a new sym_enum_const(), to use
1:19:12Step in to order_decl() to see how enums get handled
🏃
1:19:12Step in to order_decl() to see how enums get handled
🏃
1:19:12Step in to order_decl() to see how enums get handled
🏃
1:21:00Enable order_name() to handle SYM_DECL specially
1:21:00Enable order_name() to handle SYM_DECL specially
1:21:00Enable order_name() to handle SYM_DECL specially
1:22:08Run it to see that it works
🏃
1:22:08Run it to see that it works
🏃
1:22:08Run it to see that it works
🏃
1:22:10Add some dependency tests in order_test()
1:22:10Add some dependency tests in order_test()
1:22:10Add some dependency tests in order_test()
1:22:30Run it to see what happens
🏃
1:22:30Run it to see what happens
🏃
1:22:30Run it to see what happens
🏃
1:24:14Make order_name() call itself rather than order_decl()
1:24:14Make order_name() call itself rather than order_decl()
1:24:14Make order_name() call itself rather than order_decl()
1:24:43Run it and unexpectedly hit a cyclic dependency
🏃
1:24:43Run it and unexpectedly hit a cyclic dependency
🏃
1:24:43Run it and unexpectedly hit a cyclic dependency
🏃
1:25:23Revert order_name() to call order_decl() for SYM_DECL, and itself only for SYM_ENUM_CONST
1:25:23Revert order_name() to call order_decl() for SYM_DECL, and itself only for SYM_ENUM_CONST
1:25:23Revert order_name() to call order_decl() for SYM_DECL, and itself only for SYM_ENUM_CONST
1:26:01Run it to see that it actually works
🏃
1:26:01Run it to see that it actually works
🏃
1:26:01Run it to see that it actually works
🏃
1:26:19Add an out-of-order declared enum test case in order_test()
1:26:19Add an out-of-order declared enum test case in order_test()
1:26:19Add an out-of-order declared enum test case in order_test()
1:26:29Run it to see that it works as expected
🏃
1:26:29Run it to see that it works as expected
🏃
1:26:29Run it to see that it works as expected
🏃
1:26:38Mention that the enum stuff will change
🗩
1:26:38Mention that the enum stuff will change
🗩
1:26:38Mention that the enum stuff will change
🗩
1:27:09Q&A
🗩
1:27:09Q&A
🗩
1:27:09Q&A
🗩
1:29:25Rename the shadowed cap and n to new_cap and new_n in buf__printf()
1:29:25Rename the shadowed cap and n to new_cap and new_n in buf__printf()
1:29:25Rename the shadowed cap and n to new_cap and new_n in buf__printf()
1:30:29Revert buf__printf() to use the existing n, only renaming cap to new_cap
1:30:29Revert buf__printf() to use the existing n, only renaming cap to new_cap
1:30:29Revert buf__printf() to use the existing n, only renaming cap to new_cap
1:31:08A few thoughts on variable shadowing, and taking a step back and approaching problems from other directions
🗩
1:31:08A few thoughts on variable shadowing, and taking a step back and approaching problems from other directions
🗩
1:31:08A few thoughts on variable shadowing, and taking a step back and approaching problems from other directions
🗩
1:39:55That's enough philosophical digressions for one day
🗩
1:39:55That's enough philosophical digressions for one day
🗩
1:39:55That's enough philosophical digressions for one day
🗩
⏬
Next: 'Type Checking/Inference, Constant Evaluation'
⏬