We are currently in the process of converting the website to the new design. Some pages, like this one, are still broken. We appreciate your patience.
Bitwise»Episode Guide
More Order-Independent Declarations
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
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)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
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
🗩
59:04nothings2 pervognsen What case prevents you from just NOT ordering into pointer decls? If you said I missed it
🗪
59:04nothings2 pervognsen What case prevents you from just NOT ordering into pointer decls? If you said I missed it
🗪
59:04nothings2 pervognsen What case prevents you from just NOT ordering into pointer decls? If you said I missed it
🗪
59:27orcnz29 pervognsen For order-independent declarations, could you first do a scan through the top level (order-independent) declarations (funcs etc.) registering the names in the symbol table as unresolved, then do a full pass and do the your recursive type resolution as you go? The extra initial scan would only be at the global / top scope so it would / should be quick
🗪
59:27orcnz29 pervognsen For order-independent declarations, could you first do a scan through the top level (order-independent) declarations (funcs etc.) registering the names in the symbol table as unresolved, then do a full pass and do the your recursive type resolution as you go? The extra initial scan would only be at the global / top scope so it would / should be quick
🗪
59:27orcnz29 pervognsen For order-independent declarations, could you first do a scan through the top level (order-independent) declarations (funcs etc.) registering the names in the symbol table as unresolved, then do a full pass and do the your recursive type resolution as you go? The extra initial scan would only be at the global / top scope so it would / should be quick
🗪
1:00:31xanatos387 Is all of this only needed for the C backend, or does it apply for our own codegen as well?
🗪
1:00:31xanatos387 Is all of this only needed for the C backend, or does it apply for our own codegen as well?
🗪
1:00:31xanatos387 Is all of this only needed for the C backend, or does it apply for our own codegen as well?
🗪
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:04:44nothings2 I think you have to do it that way, otherwise there's no way to get 'struct S { T t; }; struct T { S *s;};' to work
🗪
1:04:44nothings2 I think you have to do it that way, otherwise there's no way to get 'struct S { T t; }; struct T { S *s;};' to work
🗪
1:04:44nothings2 I think you have to do it that way, otherwise there's no way to get 'struct S { T t; }; struct T { S *s;};' to work
🗪
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:08:52nothings2 pervognsen So you're not going to allow 'enum { A,B=X,C }; enum { X,Y=C,Z };'? I think it's possible to resolve it, but it's fine if you don't want to
🗪
1:08:52nothings2 pervognsen So you're not going to allow 'enum { A,B=X,C }; enum { X,Y=C,Z };'? I think it's possible to resolve it, but it's fine if you don't want to
🗪
1:08:52nothings2 pervognsen So you're not going to allow 'enum { A,B=X,C }; enum { X,Y=C,Z };'? I think it's possible to resolve it, but it's fine if you don't want to
🗪
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:27:22nothings2 pervognsen Can you put sym_decl() and the preceding function on the screen while you're talking? I was AFK while you did it
🗪
1:27:22nothings2 pervognsen Can you put sym_decl() and the preceding function on the screen while you're talking? I was AFK while you did it
🗪
1:27:22nothings2 pervognsen Can you put sym_decl() and the preceding function on the screen while you're talking? I was AFK while you did it
🗪
1:27:58twicetimes pervognsen Will Ion have variable name shadowing?
🗪
1:27:58twicetimes pervognsen Will Ion have variable name shadowing?
🗪
1:27:58twicetimes pervognsen Will Ion have variable name shadowing?
🗪
1:29:17nothings2 I'd prefer to call that 'newcap' or something
🗪
1:29:17nothings2 I'd prefer to call that 'newcap' or something
🗪
1:29:17nothings2 I'd prefer to call that 'newcap' or something
🗪
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:26nothings2 pervognsen If you keep that code you have to assign n back to new_n, or replicate the final lines
🗪
1:30:26nothings2 pervognsen If you keep that code you have to assign n back to new_n, or replicate the final lines
🗪
1:30:26nothings2 pervognsen If you keep that code you have to assign n back to new_n, or replicate the final lines
🗪
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:36:34nothings2 pervognsen Do you think your programming has changed since you were at RAD?
🗪
1:36:34nothings2 pervognsen Do you think your programming has changed since you were at RAD?
🗪
1:36:34nothings2 pervognsen Do you think your programming has changed since you were at RAD?
🗪
1:38:07ezysigh So, what kinds of things, i.e. what bad habits?
🗪
1:38:07ezysigh So, what kinds of things, i.e. what bad habits?
🗪
1:38:07ezysigh So, what kinds of things, i.e. what bad habits?
🗪
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
🗩