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
Compiler Hacking
?
?

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:07Recap and set the stage for the day cleaning our palate with compiler features
🗩
0:07Recap and set the stage for the day cleaning our palate with compiler features
🗩
0:07Recap and set the stage for the day cleaning our palate with compiler features
🗩
1:00Determine to implement "using"-style namespacing for packages
🗩
1:00Determine to implement "using"-style namespacing for packages
🗩
1:00Determine to implement "using"-style namespacing for packages
🗩
5:09Introduce a SYM_PACKAGE SymKind and enable process_package_imports() to create a binding between a package and its symbols
5:09Introduce a SYM_PACKAGE SymKind and enable process_package_imports() to create a binding between a package and its symbols
5:09Introduce a SYM_PACKAGE SymKind and enable process_package_imports() to create a binding between a package and its symbols
15:55Enable parse_decl_import() to support package renaming
15:55Enable parse_decl_import() to support package renaming
15:55Enable parse_decl_import() to support package renaming
20:15Test out our package renaming, with success
🏃
20:15Test out our package renaming, with success
🏃
20:15Test out our package renaming, with success
🏃
20:58Make new_decl_import() take an additional rename_name to complete our package renaming support
20:58Make new_decl_import() take an additional rename_name to complete our package renaming support
20:58Make new_decl_import() take an additional rename_name to complete our package renaming support
22:29Introduce try_resolve_package() to enable resolve_expr_field() to handle our package_name.symbol syntax in an expression context
22:29Introduce try_resolve_package() to enable resolve_expr_field() to handle our package_name.symbol syntax in an expression context
22:29Introduce try_resolve_package() to enable resolve_expr_field() to handle our package_name.symbol syntax in an expression context
33:00Test out our package symbol evaluation, without success
🏃
33:00Test out our package symbol evaluation, without success
🏃
33:00Test out our package symbol evaluation, without success
🏃
33:41Fix gen_decl() and gen_expr() to handle our namespaced packages
33:41Fix gen_decl() and gen_expr() to handle our namespaced packages
33:41Fix gen_decl() and gen_expr() to handle our namespaced packages
36:41Run it to see that it works, and take a look at our generated code
🏃
36:41Run it to see that it works, and take a look at our generated code
🏃
36:41Run it to see that it works, and take a look at our generated code
🏃
37:29Test nested references, without success
🏃
37:29Test nested references, without success
🏃
37:29Test nested references, without success
🏃
39:36Step through try_resolve_package() to see what it does with our test
🏃
39:36Step through try_resolve_package() to see what it does with our test
🏃
39:36Step through try_resolve_package() to see what it does with our test
🏃
41:33Fix process_package_imports() to correctly associate the symbol with its imported package
41:33Fix process_package_imports() to correctly associate the symbol with its imported package
41:33Fix process_package_imports() to correctly associate the symbol with its imported package
41:51Run it to find that it compiles
🏃
41:51Run it to find that it compiles
🏃
41:51Run it to find that it compiles
🏃
42:13Stress test our package renaming
42:13Stress test our package renaming
42:13Stress test our package renaming
43:39Enable sym_global_put() to handle idempotent imports
43:39Enable sym_global_put() to handle idempotent imports
43:39Enable sym_global_put() to handle idempotent imports
44:19Run it to find that it works
🏃
44:19Run it to find that it works
🏃
44:19Run it to find that it works
🏃
44:40Q&A
🗩
44:40Q&A
🗩
44:40Q&A
🗩
45:00Consider the alternative implementation of package symbol association
🗩
45:00Consider the alternative implementation of package symbol association
🗩
45:00Consider the alternative implementation of package symbol association
🗩
47:51Explain our "using"-style package namespacing
🗩
47:51Explain our "using"-style package namespacing
🗩
47:51Explain our "using"-style package namespacing
🗩
49:33Unnamed structs and unions
🗩
49:33Unnamed structs and unions
🗩
49:33Unnamed structs and unions
🗩
54:41Dive into unnamed structs and unions, starting with parse_decl_aggregate_item()
54:41Dive into unnamed structs and unions, starting with parse_decl_aggregate_item()
54:41Dive into unnamed structs and unions, starting with parse_decl_aggregate_item()
59:14Introduce parse_aggregate() and new_aggregate()
59:14Introduce parse_aggregate() and new_aggregate()
59:14Introduce parse_aggregate() and new_aggregate()
1:05:53Step in to gen_aggregate() to see that it all looks pretty busted
🏃
1:05:53Step in to gen_aggregate() to see that it all looks pretty busted
🏃
1:05:53Step in to gen_aggregate() to see that it all looks pretty busted
🏃
1:07:53Make parse_decl_aggregate_item() initialise AggregateItem members explicitly
1:07:53Make parse_decl_aggregate_item() initialise AggregateItem members explicitly
1:07:53Make parse_decl_aggregate_item() initialise AggregateItem members explicitly
1:09:01Step in to gen_aggregate() to see that the line is right, but not the name
🏃
1:09:01Step in to gen_aggregate() to see that the line is right, but not the name
🏃
1:09:01Step in to gen_aggregate() to see that the line is right, but not the name
🏃
1:14:37Fix new_aggregate() to allocate the correct size
1:14:37Fix new_aggregate() to allocate the correct size
1:14:37Fix new_aggregate() to allocate the correct size
1:14:56Run it to find that everything is as before
🏃
1:14:56Run it to find that everything is as before
🏃
1:14:56Run it to find that everything is as before
🏃
1:15:17Introduce complete_aggregate() to complete our support for unnamed structs and unions
1:15:17Introduce complete_aggregate() to complete our support for unnamed structs and unions
1:15:17Introduce complete_aggregate() to complete our support for unnamed structs and unions
1:19:14Test an unnamed union
1:19:14Test an unnamed union
1:19:14Test an unnamed union
1:20:55Introduce gen_aggregate_items() to emit the C code for our unnamed structs and unions
1:20:55Introduce gen_aggregate_items() to emit the C code for our unnamed structs and unions
1:20:55Introduce gen_aggregate_items() to emit the C code for our unnamed structs and unions
1:25:26Run it and take a look at our generated code, to see that it's all great
🏃
1:25:26Run it and take a look at our generated code, to see that it's all great
🏃
1:25:26Run it and take a look at our generated code, to see that it's all great
🏃
1:25:48Consider how to enable the type resolver to handle unnamed structs and unions
📖
1:25:48Consider how to enable the type resolver to handle unnamed structs and unions
📖
1:25:48Consider how to enable the type resolver to handle unnamed structs and unions
📖
1:32:16Stop here, with thoughts on our new package renaming, symbol association and unnamed structs and unions, and a glimpse into the next stream
🗩
1:32:16Stop here, with thoughts on our new package renaming, symbol association and unnamed structs and unions, and a glimpse into the next stream
🗩
1:32:16Stop here, with thoughts on our new package renaming, symbol association and unnamed structs and unions, and a glimpse into the next stream
🗩