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 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:08Recap and set the stage for the day
🗩
0:08Recap and set the stage for the day
🗩
0:08Recap and set the stage for the day
🗩
0:51Review the work performed on arithmetic conversions in unify_arithmetic_operands() from the last stream1
📖
0:51Review the work performed on arithmetic conversions in unify_arithmetic_operands() from the last stream1
📖
0:51Review the work performed on arithmetic conversions in unify_arithmetic_operands() from the last stream1
📖
6:27Describe the final operand promotion case under 6.3.1.8 Usual arithmetic conversions2 with an example
🗩
6:27Describe the final operand promotion case under 6.3.1.8 Usual arithmetic conversions2 with an example
🗩
6:27Describe the final operand promotion case under 6.3.1.8 Usual arithmetic conversions2 with an example
🗩
8:35Continue to review the work on const expression evaluation, the != operator and resolver error handling
📖
8:35Continue to review the work on const expression evaluation, the != operator and resolver error handling
📖
8:35Continue to review the work on const expression evaluation, the != operator and resolver error handling
📖
12:22Review the work converting between void pointers and any other pointer type, with some cool tips on C
📖
12:22Review the work converting between void pointers and any other pointer type, with some cool tips on C
📖
12:22Review the work converting between void pointers and any other pointer type, with some cool tips on C
📖
17:21Demo the new support for variadic functions
🏃
17:21Demo the new support for variadic functions
🏃
17:21Demo the new support for variadic functions
🏃
18:42Review the variadic function handling code in parse_type_func() and resolve_expr_call(), noting how these work in C3
📖
18:42Review the variadic function handling code in parse_type_func() and resolve_expr_call(), noting how these work in C3
📖
18:42Review the variadic function handling code in parse_type_func() and resolve_expr_call(), noting how these work in C3
📖
22:51Review the work supporting empty compound literals in f2()
📖
22:51Review the work supporting empty compound literals in f2()
📖
22:51Review the work supporting empty compound literals in f2()
📖
24:43Q&A
🗩
24:43Q&A
🗩
24:43Q&A
🗩
25:04irazorx0 pervognsen You have a redundant "variadic = true" as your error is if(variadic)
🗪
25:04irazorx0 pervognsen You have a redundant "variadic = true" as your error is if(variadic)
🗪
25:04irazorx0 pervognsen You have a redundant "variadic = true" as your error is if(variadic)
🗪
25:26xanatos387 pervognsen Will we have a bool type?
🗪
25:26xanatos387 pervognsen Will we have a bool type?
🗪
25:26xanatos387 pervognsen Will we have a bool type?
🗪
26:05pmttavara Not needing a temporary is amazing. I see a lot of sockets code writing things like "int zero = 0;" just so setsockopt() can take its address
🗪
26:05pmttavara Not needing a temporary is amazing. I see a lot of sockets code writing things like "int zero = 0;" just so setsockopt() can take its address
🗪
26:05pmttavara Not needing a temporary is amazing. I see a lot of sockets code writing things like "int zero = 0;" just so setsockopt() can take its address
🗪
26:28sci4me Why do you put void as a parameter?
🗪
26:28sci4me Why do you put void as a parameter?
🗪
26:28sci4me Why do you put void as a parameter?
🗪
26:49Determine to add support for annotating foreign function declarations
🗩
26:49Determine to add support for annotating foreign function declarations
🗩
26:49Determine to add support for annotating foreign function declarations
🗩
29:45Introduce a new "@" token, Note and NoteList structs and parse_note_list(), for parse_decl_opt() to call
29:45Introduce a new "@" token, Note and NoteList structs and parse_note_list(), for parse_decl_opt() to call
29:45Introduce a new "@" token, Note and NoteList structs and parse_note_list(), for parse_decl_opt() to call
34:50Test our @foreign function annotating, to see that it's not quite right
🏃
34:50Test our @foreign function annotating, to see that it's not quite right
🏃
34:50Test our @foreign function annotating, to see that it's not quite right
🏃
35:57Introduce note_list() and add a Pos pos to the Note struct
35:57Introduce note_list() and add a Pos pos to the Note struct
35:57Introduce note_list() and add a Pos pos to the Note struct
38:22Run it to see that it looks right
🏃
38:22Run it to see that it looks right
🏃
38:22Run it to see that it looks right
🏃
38:52Introduce get_decl_note() for gen_func_defs() to call
38:52Introduce get_decl_note() for gen_func_defs() to call
38:52Introduce get_decl_note() for gen_func_defs() to call
41:36Run it, with an explanation of how this works
🏃
41:36Run it, with an explanation of how this works
🏃
41:36Run it, with an explanation of how this works
🏃
42:17Annotate @foreign functions in test1.ion, and introduce is_decl_foreign() in ast.c
42:17Annotate @foreign functions in test1.ion, and introduce is_decl_foreign() in ast.c
42:17Annotate @foreign functions in test1.ion, and introduce is_decl_foreign() in ast.c
44:27Run it to see what this generates
🏃
44:27Run it to see what this generates
🏃
44:27Run it to see what this generates
🏃
45:53Introduce resolve_unary_op() to handle unary arithmetic operators, for resolve_expr_unary() to call4
45:53Introduce resolve_unary_op() to handle unary arithmetic operators, for resolve_expr_unary() to call4
45:53Introduce resolve_unary_op() to handle unary arithmetic operators, for resolve_expr_unary() to call4
50:51Introduce resolve_binary_arithmetic_op() to handle binary arithmetic operators, for resolve_expr_binary() to call5
50:51Introduce resolve_binary_arithmetic_op() to handle binary arithmetic operators, for resolve_expr_binary() to call5
50:51Introduce resolve_binary_arithmetic_op() to handle binary arithmetic operators, for resolve_expr_binary() to call5
59:05Enable resolve_expr_binary() to handle the bitwise shift operators6
59:05Enable resolve_expr_binary() to handle the bitwise shift operators6
59:05Enable resolve_expr_binary() to handle the bitwise shift operators6
1:07:27Enable resolve_expr_binary() to handle relational operators7
1:07:27Enable resolve_expr_binary() to handle relational operators7
1:07:27Enable resolve_expr_binary() to handle relational operators7
1:09:20nothings2 pervognsen Because C99 supports complex
🗪
1:09:20nothings2 pervognsen Because C99 supports complex
🗪
1:09:20nothings2 pervognsen Because C99 supports complex
🗪
1:09:28Introduce resolve_binary_op(), and enable resolve_expr_binary() to handle relational operators8
1:09:28Introduce resolve_binary_op(), and enable resolve_expr_binary() to handle relational operators8
1:09:28Introduce resolve_binary_op(), and enable resolve_expr_binary() to handle relational operators8
1:14:34Enable resolve_expr_binary() to handle equality operators9
1:14:34Enable resolve_expr_binary() to handle equality operators9
1:14:34Enable resolve_expr_binary() to handle equality operators9
1:16:37Enable resolve_expr_binary() to handle bitwise AND, XOR and OR and logical AND and OR,10 introducing is_scalar_type()
1:16:37Enable resolve_expr_binary() to handle bitwise AND, XOR and OR and logical AND and OR,10 introducing is_scalar_type()
1:16:37Enable resolve_expr_binary() to handle bitwise AND, XOR and OR and logical AND and OR,10 introducing is_scalar_type()
1:23:53Enable resolve_expr_ternary() to handle the ternary conditional operators11
1:23:53Enable resolve_expr_ternary() to handle the ternary conditional operators11
1:23:53Enable resolve_expr_ternary() to handle the ternary conditional operators11
1:27:38Introduce resolve_stmt_assign() to begin the handling of assignment operators12
1:27:38Introduce resolve_stmt_assign() to begin the handling of assignment operators12
1:27:38Introduce resolve_stmt_assign() to begin the handling of assignment operators12
1:29:41Run it to test that we didn't break anything
🏃
1:29:41Run it to test that we didn't break anything
🏃
1:29:41Run it to test that we didn't break anything
🏃
1:30:05Introduce test_ops() in test1.ion to test resolve_expr_unary()
1:30:05Introduce test_ops() in test1.ion to test resolve_expr_unary()
1:30:05Introduce test_ops() in test1.ion to test resolve_expr_unary()
1:31:34Run it to see that it works
🏃
1:31:34Run it to see that it works
🏃
1:31:34Run it to see that it works
🏃
1:32:06Try to test a ~ assignment in test_ops()
1:32:06Try to test a ~ assignment in test_ops()
1:32:06Try to test a ~ assignment in test_ops()
1:32:46Add TOKEN_NEG to token_kind_names
1:32:46Add TOKEN_NEG to token_kind_names
1:32:46Add TOKEN_NEG to token_kind_names
1:33:20Run it to find that the ~ assignment works
🏃
1:33:20Run it to find that the ~ assignment works
🏃
1:33:20Run it to find that the ~ assignment works
🏃
1:33:30Add tests of binary operators in test_ops()
🏃
🖮
1:33:30Add tests of binary operators in test_ops()
🏃
🖮
1:33:30Add tests of binary operators in test_ops()
🏃
🖮
1:34:00Fix resolve_expr_binary to handle TOKEN_MOD separately from TOKEN_MUL and TOKEN_DIV
1:34:00Fix resolve_expr_binary to handle TOKEN_MOD separately from TOKEN_MUL and TOKEN_DIV
1:34:00Fix resolve_expr_binary to handle TOKEN_MOD separately from TOKEN_MUL and TOKEN_DIV
1:34:51Test that % operator, and further assignments in test_ops()
🏃
🖮
1:34:51Test that % operator, and further assignments in test_ops()
🏃
🖮
1:34:51Test that % operator, and further assignments in test_ops()
🏃
🖮
1:37:17Fix the handling of TOKEN_SUB in resolve_expr_binary()
1:37:17Fix the handling of TOKEN_SUB in resolve_expr_binary()
1:37:17Fix the handling of TOKEN_SUB in resolve_expr_binary()
1:37:53Run it to see that it works
🏃
1:37:53Run it to see that it works
🏃
1:37:53Run it to see that it works
🏃
1:38:05Test shifting and comparison in test_ops(), to see that it all works
🏃
🖮
1:38:05Test shifting and comparison in test_ops(), to see that it all works
🏃
🖮
1:38:05Test shifting and comparison in test_ops(), to see that it all works
🏃
🖮
1:40:18Roll the TOKEN_EQ and TOKEN_NOTEQ cases into the other comparison cases in resolve_expr_binary()
1:40:18Roll the TOKEN_EQ and TOKEN_NOTEQ cases into the other comparison cases in resolve_expr_binary()
1:40:18Roll the TOKEN_EQ and TOKEN_NOTEQ cases into the other comparison cases in resolve_expr_binary()
1:40:58Test bitwise and logical comparison stuff in test_ops()
🏃
🖮
1:40:58Test bitwise and logical comparison stuff in test_ops()
🏃
🖮
1:40:58Test bitwise and logical comparison stuff in test_ops()
🏃
🖮
1:42:56Q&A
🗩
1:42:56Q&A
🗩
1:42:56Q&A
🗩
1:44:49Recap the day's work, with a glimpse into the future handling pointer decay13
🗩
1:44:49Recap the day's work, with a glimpse into the future handling pointer decay13
🗩
1:44:49Recap the day's work, with a glimpse into the future handling pointer decay13
🗩