about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-07-15 23:35:01 +0200
committerBaitinq <[email protected]>2025-07-15 23:35:01 +0200
commit37b327e4c08a01f16ee40da4d943a2aa4350810f (patch)
treeb5cb4652b5d0af6fe06efe3afb5db9d59ca3c3d5
parentFinish bootstrapping :^) (diff)
downloadpry-lang-37b327e4c08a01f16ee40da4d943a2aa4350810f.tar.gz
pry-lang-37b327e4c08a01f16ee40da4d943a2aa4350810f.tar.bz2
pry-lang-37b327e4c08a01f16ee40da4d943a2aa4350810f.zip
Boostrap: Regenerate stage 0 in script
-rwxr-xr-xbootstrap.sh3
-rw-r--r--bootstrap/output.ll2548
2 files changed, 1331 insertions, 1220 deletions
diff --git a/bootstrap.sh b/bootstrap.sh
index c95decf..310c4a2 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -18,3 +18,6 @@ echo "Building stage 2..."
 echo "Building stage 3..."
 
 ./stage2 src/main.pry && cc $(llvm-config --libs) bootstrap_output.o -o stage3
+
+echo "Regenerating stage 0..."
+./stage3 src/main.pry --generate-ir && mv output.ll bootstrap/output.ll
diff --git a/bootstrap/output.ll b/bootstrap/output.ll
index 9f1baf0..a50ae85 100644
--- a/bootstrap/output.ll
+++ b/bootstrap/output.ll
@@ -60,6 +60,8 @@ source_filename = "module"
 @TOKEN_ARROW = global i64 9
 @TOKEN_STRUCT = global i64 10
 @TOKEN_TYPE = global i64 34
+@TOKEN_AND = global i64 35
+@TOKEN_OR = global i64 36
 @TOKEN_IDENTIFIER = global i64 11
 @TOKEN_NUMBER = global i64 12
 @TOKEN_BOOLEAN = global i64 13
@@ -94,73 +96,77 @@ source_filename = "module"
 @12 = private unnamed_addr constant [7 x i8] c"Arrow\0A\00", align 1
 @13 = private unnamed_addr constant [8 x i8] c"Struct\0A\00", align 1
 @14 = private unnamed_addr constant [6 x i8] c"Type\0A\00", align 1
-@15 = private unnamed_addr constant [16 x i8] c"Identifier: %s\0A\00", align 1
-@16 = private unnamed_addr constant [12 x i8] c"Number: %d\0A\00", align 1
-@17 = private unnamed_addr constant [13 x i8] c"Boolean: %d\0A\00", align 1
-@18 = private unnamed_addr constant [6 x i8] c"Null\0A\00", align 1
-@19 = private unnamed_addr constant [10 x i8] c"Char: %c\0A\00", align 1
-@20 = private unnamed_addr constant [12 x i8] c"String: %s\0A\00", align 1
-@21 = private unnamed_addr constant [8 x i8] c"Equals\0A\00", align 1
-@22 = private unnamed_addr constant [6 x i8] c"Plus\0A\00", align 1
-@23 = private unnamed_addr constant [7 x i8] c"Minus\0A\00", align 1
-@24 = private unnamed_addr constant [5 x i8] c"Mul\0A\00", align 1
-@25 = private unnamed_addr constant [5 x i8] c"Div\0A\00", align 1
-@26 = private unnamed_addr constant [5 x i8] c"Mod\0A\00", align 1
-@27 = private unnamed_addr constant [6 x i8] c"Bang\0A\00", align 1
-@28 = private unnamed_addr constant [6 x i8] c"Less\0A\00", align 1
-@29 = private unnamed_addr constant [9 x i8] c"Greater\0A\00", align 1
-@30 = private unnamed_addr constant [5 x i8] c"Dot\0A\00", align 1
-@31 = private unnamed_addr constant [11 x i8] c"Semicolon\0A\00", align 1
-@32 = private unnamed_addr constant [7 x i8] c"Comma\0A\00", align 1
-@33 = private unnamed_addr constant [7 x i8] c"Colon\0A\00", align 1
-@34 = private unnamed_addr constant [8 x i8] c"LParen\0A\00", align 1
-@35 = private unnamed_addr constant [8 x i8] c"RParen\0A\00", align 1
-@36 = private unnamed_addr constant [8 x i8] c"LBrace\0A\00", align 1
-@37 = private unnamed_addr constant [8 x i8] c"RBrace\0A\00", align 1
-@38 = private unnamed_addr constant [2 x i8] c"'\00", align 1
-@39 = private unnamed_addr constant [2 x i8] c"'\00", align 1
-@40 = private unnamed_addr constant [2 x i8] c"\22\00", align 1
-@41 = private unnamed_addr constant [2 x i8] c"\22\00", align 1
-@42 = private unnamed_addr constant [3 x i8] c"/*\00", align 1
-@43 = private unnamed_addr constant [3 x i8] c"*/\00", align 1
-@44 = private unnamed_addr constant [7 x i8] c"import\00", align 1
-@45 = private unnamed_addr constant [4 x i8] c"let\00", align 1
-@46 = private unnamed_addr constant [7 x i8] c"extern\00", align 1
-@47 = private unnamed_addr constant [3 x i8] c"if\00", align 1
-@48 = private unnamed_addr constant [6 x i8] c"while\00", align 1
-@49 = private unnamed_addr constant [7 x i8] c"return\00", align 1
-@50 = private unnamed_addr constant [6 x i8] c"break\00", align 1
-@51 = private unnamed_addr constant [9 x i8] c"continue\00", align 1
-@52 = private unnamed_addr constant [5 x i8] c"true\00", align 1
-@53 = private unnamed_addr constant [6 x i8] c"false\00", align 1
-@54 = private unnamed_addr constant [5 x i8] c"null\00", align 1
-@55 = private unnamed_addr constant [7 x i8] c"struct\00", align 1
-@56 = private unnamed_addr constant [8 x i8] c"newtype\00", align 1
-@57 = private unnamed_addr constant [3 x i8] c"=>\00", align 1
-@58 = private unnamed_addr constant [2 x i8] c";\00", align 1
-@59 = private unnamed_addr constant [2 x i8] c",\00", align 1
-@60 = private unnamed_addr constant [2 x i8] c":\00", align 1
-@61 = private unnamed_addr constant [2 x i8] c"(\00", align 1
-@62 = private unnamed_addr constant [2 x i8] c")\00", align 1
-@63 = private unnamed_addr constant [2 x i8] c"{\00", align 1
-@64 = private unnamed_addr constant [2 x i8] c"}\00", align 1
-@65 = private unnamed_addr constant [2 x i8] c"=\00", align 1
-@66 = private unnamed_addr constant [2 x i8] c"+\00", align 1
-@67 = private unnamed_addr constant [2 x i8] c"-\00", align 1
-@68 = private unnamed_addr constant [2 x i8] c"*\00", align 1
-@69 = private unnamed_addr constant [2 x i8] c"/\00", align 1
-@70 = private unnamed_addr constant [2 x i8] c"%\00", align 1
-@71 = private unnamed_addr constant [2 x i8] c"!\00", align 1
-@72 = private unnamed_addr constant [2 x i8] c"<\00", align 1
-@73 = private unnamed_addr constant [2 x i8] c">\00", align 1
-@74 = private unnamed_addr constant [2 x i8] c".\00", align 1
-@75 = private unnamed_addr constant [11 x i8] c"NO IDENT!\0A\00", align 1
-@76 = private unnamed_addr constant [15 x i8] c"File size: %d\0A\00", align 1
-@77 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
-@78 = private unnamed_addr constant [15 x i8] c"Add token: %d\0A\00", align 1
-@79 = private unnamed_addr constant [18 x i8] c"PRINT TOKENS: %d\0A\00", align 1
-@80 = private unnamed_addr constant [18 x i8] c"ASSERTION FAILED\0A\00", align 1
-@81 = private unnamed_addr constant [18 x i8] c"ASSERTION FAILED\0A\00", align 1
+@15 = private unnamed_addr constant [5 x i8] c"And\0A\00", align 1
+@16 = private unnamed_addr constant [4 x i8] c"Or\0A\00", align 1
+@17 = private unnamed_addr constant [16 x i8] c"Identifier: %s\0A\00", align 1
+@18 = private unnamed_addr constant [12 x i8] c"Number: %d\0A\00", align 1
+@19 = private unnamed_addr constant [13 x i8] c"Boolean: %d\0A\00", align 1
+@20 = private unnamed_addr constant [6 x i8] c"Null\0A\00", align 1
+@21 = private unnamed_addr constant [10 x i8] c"Char: %c\0A\00", align 1
+@22 = private unnamed_addr constant [12 x i8] c"String: %s\0A\00", align 1
+@23 = private unnamed_addr constant [8 x i8] c"Equals\0A\00", align 1
+@24 = private unnamed_addr constant [6 x i8] c"Plus\0A\00", align 1
+@25 = private unnamed_addr constant [7 x i8] c"Minus\0A\00", align 1
+@26 = private unnamed_addr constant [5 x i8] c"Mul\0A\00", align 1
+@27 = private unnamed_addr constant [5 x i8] c"Div\0A\00", align 1
+@28 = private unnamed_addr constant [5 x i8] c"Mod\0A\00", align 1
+@29 = private unnamed_addr constant [6 x i8] c"Bang\0A\00", align 1
+@30 = private unnamed_addr constant [6 x i8] c"Less\0A\00", align 1
+@31 = private unnamed_addr constant [9 x i8] c"Greater\0A\00", align 1
+@32 = private unnamed_addr constant [5 x i8] c"Dot\0A\00", align 1
+@33 = private unnamed_addr constant [11 x i8] c"Semicolon\0A\00", align 1
+@34 = private unnamed_addr constant [7 x i8] c"Comma\0A\00", align 1
+@35 = private unnamed_addr constant [7 x i8] c"Colon\0A\00", align 1
+@36 = private unnamed_addr constant [8 x i8] c"LParen\0A\00", align 1
+@37 = private unnamed_addr constant [8 x i8] c"RParen\0A\00", align 1
+@38 = private unnamed_addr constant [8 x i8] c"LBrace\0A\00", align 1
+@39 = private unnamed_addr constant [8 x i8] c"RBrace\0A\00", align 1
+@40 = private unnamed_addr constant [2 x i8] c"'\00", align 1
+@41 = private unnamed_addr constant [2 x i8] c"'\00", align 1
+@42 = private unnamed_addr constant [2 x i8] c"\22\00", align 1
+@43 = private unnamed_addr constant [2 x i8] c"\22\00", align 1
+@44 = private unnamed_addr constant [3 x i8] c"/*\00", align 1
+@45 = private unnamed_addr constant [3 x i8] c"*/\00", align 1
+@46 = private unnamed_addr constant [7 x i8] c"import\00", align 1
+@47 = private unnamed_addr constant [4 x i8] c"let\00", align 1
+@48 = private unnamed_addr constant [7 x i8] c"extern\00", align 1
+@49 = private unnamed_addr constant [3 x i8] c"if\00", align 1
+@50 = private unnamed_addr constant [6 x i8] c"while\00", align 1
+@51 = private unnamed_addr constant [7 x i8] c"return\00", align 1
+@52 = private unnamed_addr constant [6 x i8] c"break\00", align 1
+@53 = private unnamed_addr constant [9 x i8] c"continue\00", align 1
+@54 = private unnamed_addr constant [5 x i8] c"true\00", align 1
+@55 = private unnamed_addr constant [6 x i8] c"false\00", align 1
+@56 = private unnamed_addr constant [5 x i8] c"null\00", align 1
+@57 = private unnamed_addr constant [7 x i8] c"struct\00", align 1
+@58 = private unnamed_addr constant [8 x i8] c"newtype\00", align 1
+@59 = private unnamed_addr constant [4 x i8] c"and\00", align 1
+@60 = private unnamed_addr constant [3 x i8] c"or\00", align 1
+@61 = private unnamed_addr constant [3 x i8] c"=>\00", align 1
+@62 = private unnamed_addr constant [2 x i8] c";\00", align 1
+@63 = private unnamed_addr constant [2 x i8] c",\00", align 1
+@64 = private unnamed_addr constant [2 x i8] c":\00", align 1
+@65 = private unnamed_addr constant [2 x i8] c"(\00", align 1
+@66 = private unnamed_addr constant [2 x i8] c")\00", align 1
+@67 = private unnamed_addr constant [2 x i8] c"{\00", align 1
+@68 = private unnamed_addr constant [2 x i8] c"}\00", align 1
+@69 = private unnamed_addr constant [2 x i8] c"=\00", align 1
+@70 = private unnamed_addr constant [2 x i8] c"+\00", align 1
+@71 = private unnamed_addr constant [2 x i8] c"-\00", align 1
+@72 = private unnamed_addr constant [2 x i8] c"*\00", align 1
+@73 = private unnamed_addr constant [2 x i8] c"/\00", align 1
+@74 = private unnamed_addr constant [2 x i8] c"%\00", align 1
+@75 = private unnamed_addr constant [2 x i8] c"!\00", align 1
+@76 = private unnamed_addr constant [2 x i8] c"<\00", align 1
+@77 = private unnamed_addr constant [2 x i8] c">\00", align 1
+@78 = private unnamed_addr constant [2 x i8] c".\00", align 1
+@79 = private unnamed_addr constant [11 x i8] c"NO IDENT!\0A\00", align 1
+@80 = private unnamed_addr constant [15 x i8] c"File size: %d\0A\00", align 1
+@81 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
+@82 = private unnamed_addr constant [15 x i8] c"Add token: %d\0A\00", align 1
+@83 = private unnamed_addr constant [18 x i8] c"PRINT TOKENS: %d\0A\00", align 1
+@84 = private unnamed_addr constant [18 x i8] c"ASSERTION FAILED\0A\00", align 1
+@85 = private unnamed_addr constant [18 x i8] c"ASSERTION FAILED\0A\00", align 1
 @TOKEN_IMPORT.4 = global i64 1
 @TOKEN_LET.5 = global i64 2
 @TOKEN_EXTERN.6 = global i64 3
@@ -172,105 +178,111 @@ source_filename = "module"
 @TOKEN_ARROW.12 = global i64 9
 @TOKEN_STRUCT.13 = global i64 10
 @TOKEN_TYPE.14 = global i64 34
-@TOKEN_IDENTIFIER.15 = global i64 11
-@TOKEN_NUMBER.16 = global i64 12
-@TOKEN_BOOLEAN.17 = global i64 13
-@TOKEN_NULL.18 = global i64 14
-@TOKEN_CHAR.19 = global i64 15
-@TOKEN_STRING.20 = global i64 16
-@TOKEN_EQUALS.21 = global i64 17
-@TOKEN_PLUS.22 = global i64 18
-@TOKEN_MINUS.23 = global i64 19
-@TOKEN_MUL.24 = global i64 20
-@TOKEN_DIV.25 = global i64 21
-@TOKEN_MOD.26 = global i64 22
-@TOKEN_BANG.27 = global i64 23
-@TOKEN_LESS.28 = global i64 24
-@TOKEN_GREATER.29 = global i64 25
-@TOKEN_DOT.30 = global i64 26
-@TOKEN_SEMICOLON.31 = global i64 27
-@TOKEN_COMMA.32 = global i64 28
-@TOKEN_COLON.33 = global i64 29
-@TOKEN_LPAREN.34 = global i64 30
-@TOKEN_RPAREN.35 = global i64 31
-@TOKEN_LBRACE.36 = global i64 32
-@TOKEN_RBRACE.37 = global i64 33
-@82 = private unnamed_addr constant [8 x i8] c"Import\0A\00", align 1
-@83 = private unnamed_addr constant [5 x i8] c"Let\0A\00", align 1
-@84 = private unnamed_addr constant [8 x i8] c"Extern\0A\00", align 1
-@85 = private unnamed_addr constant [4 x i8] c"If\0A\00", align 1
-@86 = private unnamed_addr constant [7 x i8] c"While\0A\00", align 1
-@87 = private unnamed_addr constant [8 x i8] c"Return\0A\00", align 1
-@88 = private unnamed_addr constant [7 x i8] c"Break\0A\00", align 1
-@89 = private unnamed_addr constant [10 x i8] c"Continue\0A\00", align 1
-@90 = private unnamed_addr constant [7 x i8] c"Arrow\0A\00", align 1
-@91 = private unnamed_addr constant [8 x i8] c"Struct\0A\00", align 1
-@92 = private unnamed_addr constant [6 x i8] c"Type\0A\00", align 1
-@93 = private unnamed_addr constant [16 x i8] c"Identifier: %s\0A\00", align 1
-@94 = private unnamed_addr constant [12 x i8] c"Number: %d\0A\00", align 1
-@95 = private unnamed_addr constant [13 x i8] c"Boolean: %d\0A\00", align 1
-@96 = private unnamed_addr constant [6 x i8] c"Null\0A\00", align 1
-@97 = private unnamed_addr constant [10 x i8] c"Char: %c\0A\00", align 1
-@98 = private unnamed_addr constant [12 x i8] c"String: %s\0A\00", align 1
-@99 = private unnamed_addr constant [8 x i8] c"Equals\0A\00", align 1
-@100 = private unnamed_addr constant [6 x i8] c"Plus\0A\00", align 1
-@101 = private unnamed_addr constant [7 x i8] c"Minus\0A\00", align 1
-@102 = private unnamed_addr constant [5 x i8] c"Mul\0A\00", align 1
-@103 = private unnamed_addr constant [5 x i8] c"Div\0A\00", align 1
-@104 = private unnamed_addr constant [5 x i8] c"Mod\0A\00", align 1
-@105 = private unnamed_addr constant [6 x i8] c"Bang\0A\00", align 1
-@106 = private unnamed_addr constant [6 x i8] c"Less\0A\00", align 1
-@107 = private unnamed_addr constant [9 x i8] c"Greater\0A\00", align 1
-@108 = private unnamed_addr constant [5 x i8] c"Dot\0A\00", align 1
-@109 = private unnamed_addr constant [11 x i8] c"Semicolon\0A\00", align 1
-@110 = private unnamed_addr constant [7 x i8] c"Comma\0A\00", align 1
-@111 = private unnamed_addr constant [7 x i8] c"Colon\0A\00", align 1
-@112 = private unnamed_addr constant [8 x i8] c"LParen\0A\00", align 1
-@113 = private unnamed_addr constant [8 x i8] c"RParen\0A\00", align 1
-@114 = private unnamed_addr constant [8 x i8] c"LBrace\0A\00", align 1
-@115 = private unnamed_addr constant [8 x i8] c"RBrace\0A\00", align 1
-@116 = private unnamed_addr constant [2 x i8] c"'\00", align 1
-@117 = private unnamed_addr constant [2 x i8] c"'\00", align 1
-@118 = private unnamed_addr constant [2 x i8] c"\22\00", align 1
-@119 = private unnamed_addr constant [2 x i8] c"\22\00", align 1
-@120 = private unnamed_addr constant [3 x i8] c"/*\00", align 1
-@121 = private unnamed_addr constant [3 x i8] c"*/\00", align 1
-@122 = private unnamed_addr constant [7 x i8] c"import\00", align 1
-@123 = private unnamed_addr constant [4 x i8] c"let\00", align 1
-@124 = private unnamed_addr constant [7 x i8] c"extern\00", align 1
-@125 = private unnamed_addr constant [3 x i8] c"if\00", align 1
-@126 = private unnamed_addr constant [6 x i8] c"while\00", align 1
-@127 = private unnamed_addr constant [7 x i8] c"return\00", align 1
-@128 = private unnamed_addr constant [6 x i8] c"break\00", align 1
-@129 = private unnamed_addr constant [9 x i8] c"continue\00", align 1
-@130 = private unnamed_addr constant [5 x i8] c"true\00", align 1
-@131 = private unnamed_addr constant [6 x i8] c"false\00", align 1
-@132 = private unnamed_addr constant [5 x i8] c"null\00", align 1
-@133 = private unnamed_addr constant [7 x i8] c"struct\00", align 1
-@134 = private unnamed_addr constant [8 x i8] c"newtype\00", align 1
-@135 = private unnamed_addr constant [3 x i8] c"=>\00", align 1
-@136 = private unnamed_addr constant [2 x i8] c";\00", align 1
-@137 = private unnamed_addr constant [2 x i8] c",\00", align 1
-@138 = private unnamed_addr constant [2 x i8] c":\00", align 1
-@139 = private unnamed_addr constant [2 x i8] c"(\00", align 1
-@140 = private unnamed_addr constant [2 x i8] c")\00", align 1
-@141 = private unnamed_addr constant [2 x i8] c"{\00", align 1
-@142 = private unnamed_addr constant [2 x i8] c"}\00", align 1
-@143 = private unnamed_addr constant [2 x i8] c"=\00", align 1
-@144 = private unnamed_addr constant [2 x i8] c"+\00", align 1
-@145 = private unnamed_addr constant [2 x i8] c"-\00", align 1
-@146 = private unnamed_addr constant [2 x i8] c"*\00", align 1
-@147 = private unnamed_addr constant [2 x i8] c"/\00", align 1
-@148 = private unnamed_addr constant [2 x i8] c"%\00", align 1
-@149 = private unnamed_addr constant [2 x i8] c"!\00", align 1
-@150 = private unnamed_addr constant [2 x i8] c"<\00", align 1
-@151 = private unnamed_addr constant [2 x i8] c">\00", align 1
-@152 = private unnamed_addr constant [2 x i8] c".\00", align 1
-@153 = private unnamed_addr constant [11 x i8] c"NO IDENT!\0A\00", align 1
-@154 = private unnamed_addr constant [15 x i8] c"File size: %d\0A\00", align 1
-@155 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
-@156 = private unnamed_addr constant [15 x i8] c"Add token: %d\0A\00", align 1
-@157 = private unnamed_addr constant [18 x i8] c"PRINT TOKENS: %d\0A\00", align 1
+@TOKEN_AND.15 = global i64 35
+@TOKEN_OR.16 = global i64 36
+@TOKEN_IDENTIFIER.17 = global i64 11
+@TOKEN_NUMBER.18 = global i64 12
+@TOKEN_BOOLEAN.19 = global i64 13
+@TOKEN_NULL.20 = global i64 14
+@TOKEN_CHAR.21 = global i64 15
+@TOKEN_STRING.22 = global i64 16
+@TOKEN_EQUALS.23 = global i64 17
+@TOKEN_PLUS.24 = global i64 18
+@TOKEN_MINUS.25 = global i64 19
+@TOKEN_MUL.26 = global i64 20
+@TOKEN_DIV.27 = global i64 21
+@TOKEN_MOD.28 = global i64 22
+@TOKEN_BANG.29 = global i64 23
+@TOKEN_LESS.30 = global i64 24
+@TOKEN_GREATER.31 = global i64 25
+@TOKEN_DOT.32 = global i64 26
+@TOKEN_SEMICOLON.33 = global i64 27
+@TOKEN_COMMA.34 = global i64 28
+@TOKEN_COLON.35 = global i64 29
+@TOKEN_LPAREN.36 = global i64 30
+@TOKEN_RPAREN.37 = global i64 31
+@TOKEN_LBRACE.38 = global i64 32
+@TOKEN_RBRACE.39 = global i64 33
+@86 = private unnamed_addr constant [8 x i8] c"Import\0A\00", align 1
+@87 = private unnamed_addr constant [5 x i8] c"Let\0A\00", align 1
+@88 = private unnamed_addr constant [8 x i8] c"Extern\0A\00", align 1
+@89 = private unnamed_addr constant [4 x i8] c"If\0A\00", align 1
+@90 = private unnamed_addr constant [7 x i8] c"While\0A\00", align 1
+@91 = private unnamed_addr constant [8 x i8] c"Return\0A\00", align 1
+@92 = private unnamed_addr constant [7 x i8] c"Break\0A\00", align 1
+@93 = private unnamed_addr constant [10 x i8] c"Continue\0A\00", align 1
+@94 = private unnamed_addr constant [7 x i8] c"Arrow\0A\00", align 1
+@95 = private unnamed_addr constant [8 x i8] c"Struct\0A\00", align 1
+@96 = private unnamed_addr constant [6 x i8] c"Type\0A\00", align 1
+@97 = private unnamed_addr constant [5 x i8] c"And\0A\00", align 1
+@98 = private unnamed_addr constant [4 x i8] c"Or\0A\00", align 1
+@99 = private unnamed_addr constant [16 x i8] c"Identifier: %s\0A\00", align 1
+@100 = private unnamed_addr constant [12 x i8] c"Number: %d\0A\00", align 1
+@101 = private unnamed_addr constant [13 x i8] c"Boolean: %d\0A\00", align 1
+@102 = private unnamed_addr constant [6 x i8] c"Null\0A\00", align 1
+@103 = private unnamed_addr constant [10 x i8] c"Char: %c\0A\00", align 1
+@104 = private unnamed_addr constant [12 x i8] c"String: %s\0A\00", align 1
+@105 = private unnamed_addr constant [8 x i8] c"Equals\0A\00", align 1
+@106 = private unnamed_addr constant [6 x i8] c"Plus\0A\00", align 1
+@107 = private unnamed_addr constant [7 x i8] c"Minus\0A\00", align 1
+@108 = private unnamed_addr constant [5 x i8] c"Mul\0A\00", align 1
+@109 = private unnamed_addr constant [5 x i8] c"Div\0A\00", align 1
+@110 = private unnamed_addr constant [5 x i8] c"Mod\0A\00", align 1
+@111 = private unnamed_addr constant [6 x i8] c"Bang\0A\00", align 1
+@112 = private unnamed_addr constant [6 x i8] c"Less\0A\00", align 1
+@113 = private unnamed_addr constant [9 x i8] c"Greater\0A\00", align 1
+@114 = private unnamed_addr constant [5 x i8] c"Dot\0A\00", align 1
+@115 = private unnamed_addr constant [11 x i8] c"Semicolon\0A\00", align 1
+@116 = private unnamed_addr constant [7 x i8] c"Comma\0A\00", align 1
+@117 = private unnamed_addr constant [7 x i8] c"Colon\0A\00", align 1
+@118 = private unnamed_addr constant [8 x i8] c"LParen\0A\00", align 1
+@119 = private unnamed_addr constant [8 x i8] c"RParen\0A\00", align 1
+@120 = private unnamed_addr constant [8 x i8] c"LBrace\0A\00", align 1
+@121 = private unnamed_addr constant [8 x i8] c"RBrace\0A\00", align 1
+@122 = private unnamed_addr constant [2 x i8] c"'\00", align 1
+@123 = private unnamed_addr constant [2 x i8] c"'\00", align 1
+@124 = private unnamed_addr constant [2 x i8] c"\22\00", align 1
+@125 = private unnamed_addr constant [2 x i8] c"\22\00", align 1
+@126 = private unnamed_addr constant [3 x i8] c"/*\00", align 1
+@127 = private unnamed_addr constant [3 x i8] c"*/\00", align 1
+@128 = private unnamed_addr constant [7 x i8] c"import\00", align 1
+@129 = private unnamed_addr constant [4 x i8] c"let\00", align 1
+@130 = private unnamed_addr constant [7 x i8] c"extern\00", align 1
+@131 = private unnamed_addr constant [3 x i8] c"if\00", align 1
+@132 = private unnamed_addr constant [6 x i8] c"while\00", align 1
+@133 = private unnamed_addr constant [7 x i8] c"return\00", align 1
+@134 = private unnamed_addr constant [6 x i8] c"break\00", align 1
+@135 = private unnamed_addr constant [9 x i8] c"continue\00", align 1
+@136 = private unnamed_addr constant [5 x i8] c"true\00", align 1
+@137 = private unnamed_addr constant [6 x i8] c"false\00", align 1
+@138 = private unnamed_addr constant [5 x i8] c"null\00", align 1
+@139 = private unnamed_addr constant [7 x i8] c"struct\00", align 1
+@140 = private unnamed_addr constant [8 x i8] c"newtype\00", align 1
+@141 = private unnamed_addr constant [4 x i8] c"and\00", align 1
+@142 = private unnamed_addr constant [3 x i8] c"or\00", align 1
+@143 = private unnamed_addr constant [3 x i8] c"=>\00", align 1
+@144 = private unnamed_addr constant [2 x i8] c";\00", align 1
+@145 = private unnamed_addr constant [2 x i8] c",\00", align 1
+@146 = private unnamed_addr constant [2 x i8] c":\00", align 1
+@147 = private unnamed_addr constant [2 x i8] c"(\00", align 1
+@148 = private unnamed_addr constant [2 x i8] c")\00", align 1
+@149 = private unnamed_addr constant [2 x i8] c"{\00", align 1
+@150 = private unnamed_addr constant [2 x i8] c"}\00", align 1
+@151 = private unnamed_addr constant [2 x i8] c"=\00", align 1
+@152 = private unnamed_addr constant [2 x i8] c"+\00", align 1
+@153 = private unnamed_addr constant [2 x i8] c"-\00", align 1
+@154 = private unnamed_addr constant [2 x i8] c"*\00", align 1
+@155 = private unnamed_addr constant [2 x i8] c"/\00", align 1
+@156 = private unnamed_addr constant [2 x i8] c"%\00", align 1
+@157 = private unnamed_addr constant [2 x i8] c"!\00", align 1
+@158 = private unnamed_addr constant [2 x i8] c"<\00", align 1
+@159 = private unnamed_addr constant [2 x i8] c">\00", align 1
+@160 = private unnamed_addr constant [2 x i8] c".\00", align 1
+@161 = private unnamed_addr constant [11 x i8] c"NO IDENT!\0A\00", align 1
+@162 = private unnamed_addr constant [15 x i8] c"File size: %d\0A\00", align 1
+@163 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
+@164 = private unnamed_addr constant [15 x i8] c"Add token: %d\0A\00", align 1
+@165 = private unnamed_addr constant [18 x i8] c"PRINT TOKENS: %d\0A\00", align 1
 @NODE_PROGRAM = global i64 1
 @NODE_STATEMENT = global i64 2
 @NODE_ASSIGNMENT_STATEMENT = global i64 3
@@ -313,22 +325,22 @@ source_filename = "module"
 @UNARY_EXPRESSION_TYPE_NOT = global i64 0
 @UNARY_EXPRESSION_TYPE_MINUS = global i64 1
 @UNARY_EXPRESSION_TYPE_STAR = global i64 2
-@158 = private unnamed_addr constant [5 x i8] c"cast\00", align 1
-@159 = private unnamed_addr constant [7 x i8] c"sizeof\00", align 1
-@160 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@161 = private unnamed_addr constant [16 x i8] c"STRUCT TYP: %d\0A\00", align 1
-@162 = private unnamed_addr constant [8 x i8] c"NO TOK\0A\00", align 1
-@163 = private unnamed_addr constant [9 x i8] c"./std/%s\00", align 1
-@164 = private unnamed_addr constant [2 x i8] c".\00", align 1
-@165 = private unnamed_addr constant [6 x i8] c"None\0A\00", align 1
-@166 = private unnamed_addr constant [18 x i8] c"ASSERTION FAILED\0A\00", align 1
-@167 = private unnamed_addr constant [18 x i8] c"ASSERTION FAILED\0A\00", align 1
+@166 = private unnamed_addr constant [5 x i8] c"cast\00", align 1
+@167 = private unnamed_addr constant [7 x i8] c"sizeof\00", align 1
+@168 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@169 = private unnamed_addr constant [16 x i8] c"STRUCT TYP: %d\0A\00", align 1
+@170 = private unnamed_addr constant [8 x i8] c"NO TOK\0A\00", align 1
+@171 = private unnamed_addr constant [9 x i8] c"./std/%s\00", align 1
+@172 = private unnamed_addr constant [2 x i8] c".\00", align 1
+@173 = private unnamed_addr constant [6 x i8] c"None\0A\00", align 1
+@174 = private unnamed_addr constant [18 x i8] c"ASSERTION FAILED\0A\00", align 1
+@175 = private unnamed_addr constant [18 x i8] c"ASSERTION FAILED\0A\00", align 1
 @LLVMCodeGenLevelDefault = global i64 2
 @LLVMRelocDefault = global i64 0
 @LLVMCodeModelDefault = global i64 0
 @LLVMAbortProcessAction = global i64 0
 @LLVMObjectFile = global i64 1
-@168 = global i64 5
+@176 = global i64 5
 @LLVMIntEQ = global i64 32
 @LLVMIntNE = global i64 33
 @LLVMIntUGT = global i64 34
@@ -339,80 +351,80 @@ source_filename = "module"
 @LLVMIntSGE = global i64 39
 @LLVMIntSLT = global i64 40
 @LLVMIntSLE = global i64 41
-@169 = private unnamed_addr constant [7 x i8] c"module\00", align 1
-@170 = private unnamed_addr constant [8 x i8] c"varargs\00", align 1
-@171 = private unnamed_addr constant [27 x i8] c"Types do not match: %d != \00", align 1
-@172 = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
-@173 = private unnamed_addr constant [34 x i8] c"Simple types do not match: %s != \00", align 1
-@174 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
-@175 = private unnamed_addr constant [36 x i8] c"Function return types do not match\0A\00", align 1
-@176 = private unnamed_addr constant [41 x i8] c"Function parameter lengths do not match\0A\00", align 1
-@177 = private unnamed_addr constant [39 x i8] c"Function parameter types do not match\0A\00", align 1
-@178 = private unnamed_addr constant [28 x i8] c"Pointer types do not match\0A\00", align 1
-@179 = private unnamed_addr constant [35 x i8] c"Struct field lengths do not match\0A\00", align 1
-@180 = private unnamed_addr constant [33 x i8] c"Struct field types do not match\0A\00", align 1
-@181 = private unnamed_addr constant [3 x i8] c"i8\00", align 1
-@182 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
-@183 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
-@184 = private unnamed_addr constant [5 x i8] c"void\00", align 1
-@185 = private unnamed_addr constant [8 x i8] c"varargs\00", align 1
-@186 = private unnamed_addr constant [20 x i8] c"NO SIMPLE TYPE %s!\0A\00", align 1
-@187 = private unnamed_addr constant [8 x i8] c"varargs\00", align 1
-@188 = private unnamed_addr constant [18 x i8] c"NO TYPEEE BOI %d\0A\00", align 1
-@189 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@190 = private unnamed_addr constant [5 x i8] c"void\00", align 1
-@191 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
-@192 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
-@193 = private unnamed_addr constant [3 x i8] c"i8\00", align 1
-@194 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@195 = private unnamed_addr constant [3 x i8] c"i8\00", align 1
-@196 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@177 = private unnamed_addr constant [7 x i8] c"module\00", align 1
+@178 = private unnamed_addr constant [8 x i8] c"varargs\00", align 1
+@179 = private unnamed_addr constant [27 x i8] c"Types do not match: %d != \00", align 1
+@180 = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
+@181 = private unnamed_addr constant [34 x i8] c"Simple types do not match: %s != \00", align 1
+@182 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
+@183 = private unnamed_addr constant [36 x i8] c"Function return types do not match\0A\00", align 1
+@184 = private unnamed_addr constant [41 x i8] c"Function parameter lengths do not match\0A\00", align 1
+@185 = private unnamed_addr constant [39 x i8] c"Function parameter types do not match\0A\00", align 1
+@186 = private unnamed_addr constant [28 x i8] c"Pointer types do not match\0A\00", align 1
+@187 = private unnamed_addr constant [35 x i8] c"Struct field lengths do not match\0A\00", align 1
+@188 = private unnamed_addr constant [33 x i8] c"Struct field types do not match\0A\00", align 1
+@189 = private unnamed_addr constant [3 x i8] c"i8\00", align 1
+@190 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
+@191 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
+@192 = private unnamed_addr constant [5 x i8] c"void\00", align 1
+@193 = private unnamed_addr constant [8 x i8] c"varargs\00", align 1
+@194 = private unnamed_addr constant [20 x i8] c"NO SIMPLE TYPE %s!\0A\00", align 1
+@195 = private unnamed_addr constant [8 x i8] c"varargs\00", align 1
+@196 = private unnamed_addr constant [18 x i8] c"NO TYPEEE BOI %d\0A\00", align 1
 @197 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@198 = private unnamed_addr constant [8 x i8] c"varargs\00", align 1
-@199 = private unnamed_addr constant [13 x i8] c"unnamed_func\00", align 1
-@200 = private unnamed_addr constant [11 x i8] c"entrypoint\00", align 1
-@201 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@202 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
-@203 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
+@198 = private unnamed_addr constant [5 x i8] c"void\00", align 1
+@199 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
+@200 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
+@201 = private unnamed_addr constant [3 x i8] c"i8\00", align 1
+@202 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@203 = private unnamed_addr constant [3 x i8] c"i8\00", align 1
 @204 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
 @205 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@206 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@207 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@208 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@206 = private unnamed_addr constant [8 x i8] c"varargs\00", align 1
+@207 = private unnamed_addr constant [13 x i8] c"unnamed_func\00", align 1
+@208 = private unnamed_addr constant [11 x i8] c"entrypoint\00", align 1
 @209 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
 @210 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
-@211 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@212 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
+@211 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
+@212 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
 @213 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@214 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
+@214 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
 @215 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
 @216 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@217 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
-@218 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@219 = private unnamed_addr constant [14 x i8] c"ASSERT 1: %d\0A\00", align 1
-@220 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@221 = private unnamed_addr constant [13 x i8] c"ASSERT 2 %d\0A\00", align 1
-@222 = private unnamed_addr constant [19 x i8] c"NO variable 2: %s\0A\00", align 1
-@223 = private unnamed_addr constant [19 x i8] c"NO variable 1: %s\0A\00", align 1
+@217 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@218 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
+@219 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@220 = private unnamed_addr constant [5 x i8] c"bool\00", align 1
+@221 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@222 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
+@223 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
 @224 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@225 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@226 = private unnamed_addr constant [11 x i8] c"then_block\00", align 1
-@227 = private unnamed_addr constant [12 x i8] c"merge_block\00", align 1
-@228 = private unnamed_addr constant [12 x i8] c"while_block\00", align 1
-@229 = private unnamed_addr constant [12 x i8] c"inner_block\00", align 1
-@230 = private unnamed_addr constant [12 x i8] c"outer_block\00", align 1
-@231 = private unnamed_addr constant [13 x i8] c"ASSERT 3 %d\0A\00", align 1
-@232 = private unnamed_addr constant [10 x i8] c"output.ll\00", align 1
-@233 = private unnamed_addr constant [19 x i8] c"Target output: %s\0A\00", align 1
-@234 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@235 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
-@236 = private unnamed_addr constant [25 x i8] c"Verification output: %s\0A\00", align 1
-@237 = private unnamed_addr constant [19 x i8] c"bootstrap_output.o\00", align 1
-@238 = private unnamed_addr constant [27 x i8] c"Object file generated: %s\0A\00", align 1
-@239 = private unnamed_addr constant [2 x i8] c"r\00", align 1
-@240 = private unnamed_addr constant [16 x i8] c"Need filename!\0A\00", align 1
-@241 = private unnamed_addr constant [14 x i8] c"--generate-ir\00", align 1
-@242 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
+@225 = private unnamed_addr constant [4 x i8] c"i64\00", align 1
+@226 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@227 = private unnamed_addr constant [14 x i8] c"ASSERT 1: %d\0A\00", align 1
+@228 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@229 = private unnamed_addr constant [13 x i8] c"ASSERT 2 %d\0A\00", align 1
+@230 = private unnamed_addr constant [19 x i8] c"NO variable 2: %s\0A\00", align 1
+@231 = private unnamed_addr constant [19 x i8] c"NO variable 1: %s\0A\00", align 1
+@232 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@233 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@234 = private unnamed_addr constant [11 x i8] c"then_block\00", align 1
+@235 = private unnamed_addr constant [12 x i8] c"merge_block\00", align 1
+@236 = private unnamed_addr constant [12 x i8] c"while_block\00", align 1
+@237 = private unnamed_addr constant [12 x i8] c"inner_block\00", align 1
+@238 = private unnamed_addr constant [12 x i8] c"outer_block\00", align 1
+@239 = private unnamed_addr constant [13 x i8] c"ASSERT 3 %d\0A\00", align 1
+@240 = private unnamed_addr constant [10 x i8] c"output.ll\00", align 1
+@241 = private unnamed_addr constant [19 x i8] c"Target output: %s\0A\00", align 1
+@242 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@243 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
+@244 = private unnamed_addr constant [25 x i8] c"Verification output: %s\0A\00", align 1
+@245 = private unnamed_addr constant [19 x i8] c"bootstrap_output.o\00", align 1
+@246 = private unnamed_addr constant [27 x i8] c"Object file generated: %s\0A\00", align 1
+@247 = private unnamed_addr constant [2 x i8] c"r\00", align 1
+@248 = private unnamed_addr constant [16 x i8] c"Need filename!\0A\00", align 1
+@249 = private unnamed_addr constant [14 x i8] c"--generate-ir\00", align 1
+@250 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
 
 declare void @printf(ptr, ...)
 
@@ -1865,7 +1877,7 @@ entrypoint13:                                     ; No predecessors!
   br i1 %10, label %then_block15, label %merge_block16
 
 then_block15:                                     ; preds = %entrypoint13
-  call void (ptr, ...) @printf(ptr @80)
+  call void (ptr, ...) @printf(ptr @84)
   call void @exit(i64 1)
   br label %merge_block16
 
@@ -1880,7 +1892,7 @@ entrypoint17:                                     ; No predecessors!
   br i1 %12, label %then_block19, label %merge_block20
 
 then_block19:                                     ; preds = %entrypoint17
-  call void (ptr, ...) @printf(ptr @81)
+  call void (ptr, ...) @printf(ptr @85)
   call void @exit(i64 1)
   br label %merge_block20
 
@@ -1895,7 +1907,7 @@ entrypoint21:                                     ; No predecessors!
   br i1 %14, label %then_block23, label %merge_block24
 
 then_block23:                                     ; preds = %entrypoint21
-  call void (ptr, ...) @printf(ptr @166)
+  call void (ptr, ...) @printf(ptr @174)
   call void @exit(i64 1)
   br label %merge_block24
 
@@ -1910,7 +1922,7 @@ entrypoint25:                                     ; No predecessors!
   br i1 %16, label %then_block27, label %merge_block28
 
 then_block27:                                     ; preds = %entrypoint25
-  call void (ptr, ...) @printf(ptr @167)
+  call void (ptr, ...) @printf(ptr @175)
   call void @exit(i64 1)
   br label %merge_block28
 
@@ -2160,7 +2172,7 @@ entrypoint:
   store i64 0, ptr %i, align 4
   br label %while_block
 
-while_block:                                      ; preds = %merge_block103, %entrypoint
+while_block:                                      ; preds = %merge_block109, %entrypoint
   %2 = load i64, ptr %i, align 4
   %3 = load i64, ptr %ts_len, align 4
   %4 = icmp slt i64 %2, %3
@@ -2299,108 +2311,108 @@ then_block29:                                     ; preds = %merge_block27
 merge_block30:                                    ; preds = %merge_block27, %then_block29
   %type31 = getelementptr %token, ptr %to, i32 0, i32 0
   %42 = load i64, ptr %type31, align 4
-  %43 = load i64, ptr @TOKEN_IDENTIFIER, align 4
+  %43 = load i64, ptr @TOKEN_AND, align 4
   %44 = icmp eq i64 %42, %43
   br i1 %44, label %then_block32, label %merge_block33
 
 then_block32:                                     ; preds = %merge_block30
-  %data = getelementptr %token, ptr %to, i32 0, i32 1
-  %45 = load ptr, ptr %data, align 8
-  call void (ptr, ...) @printf(ptr @15, ptr %45)
+  call void (ptr, ...) @printf(ptr @15)
   br label %merge_block33
 
 merge_block33:                                    ; preds = %merge_block30, %then_block32
   %type34 = getelementptr %token, ptr %to, i32 0, i32 0
-  %46 = load i64, ptr %type34, align 4
-  %47 = load i64, ptr @TOKEN_NUMBER, align 4
-  %48 = icmp eq i64 %46, %47
-  br i1 %48, label %then_block35, label %merge_block37
+  %45 = load i64, ptr %type34, align 4
+  %46 = load i64, ptr @TOKEN_OR, align 4
+  %47 = icmp eq i64 %45, %46
+  br i1 %47, label %then_block35, label %merge_block36
 
 then_block35:                                     ; preds = %merge_block33
-  %data36 = getelementptr %token, ptr %to, i32 0, i32 1
-  %49 = load ptr, ptr %data36, align 8
-  %50 = load i64, ptr %49, align 4
-  call void (ptr, ...) @printf(ptr @16, i64 %50)
-  br label %merge_block37
-
-merge_block37:                                    ; preds = %merge_block33, %then_block35
-  %type38 = getelementptr %token, ptr %to, i32 0, i32 0
-  %51 = load i64, ptr %type38, align 4
-  %52 = load i64, ptr @TOKEN_BOOLEAN, align 4
-  %53 = icmp eq i64 %51, %52
-  br i1 %53, label %then_block39, label %merge_block41
-
-then_block39:                                     ; preds = %merge_block37
-  %data40 = getelementptr %token, ptr %to, i32 0, i32 1
-  %54 = load ptr, ptr %data40, align 8
-  %55 = load i1, ptr %54, align 1
-  call void (ptr, ...) @printf(ptr @17, i1 %55)
-  br label %merge_block41
-
-merge_block41:                                    ; preds = %merge_block37, %then_block39
-  %type42 = getelementptr %token, ptr %to, i32 0, i32 0
-  %56 = load i64, ptr %type42, align 4
-  %57 = load i64, ptr @TOKEN_NULL, align 4
-  %58 = icmp eq i64 %56, %57
-  br i1 %58, label %then_block43, label %merge_block44
+  call void (ptr, ...) @printf(ptr @16)
+  br label %merge_block36
 
-then_block43:                                     ; preds = %merge_block41
-  call void (ptr, ...) @printf(ptr @18)
-  br label %merge_block44
+merge_block36:                                    ; preds = %merge_block33, %then_block35
+  %type37 = getelementptr %token, ptr %to, i32 0, i32 0
+  %48 = load i64, ptr %type37, align 4
+  %49 = load i64, ptr @TOKEN_IDENTIFIER, align 4
+  %50 = icmp eq i64 %48, %49
+  br i1 %50, label %then_block38, label %merge_block39
 
-merge_block44:                                    ; preds = %merge_block41, %then_block43
-  %type45 = getelementptr %token, ptr %to, i32 0, i32 0
-  %59 = load i64, ptr %type45, align 4
-  %60 = load i64, ptr @TOKEN_CHAR, align 4
-  %61 = icmp eq i64 %59, %60
-  br i1 %61, label %then_block46, label %merge_block48
-
-then_block46:                                     ; preds = %merge_block44
-  %data47 = getelementptr %token, ptr %to, i32 0, i32 1
-  %62 = load ptr, ptr %data47, align 8
-  %63 = load i8, ptr %62, align 1
-  call void (ptr, ...) @printf(ptr @19, i8 %63)
-  br label %merge_block48
+then_block38:                                     ; preds = %merge_block36
+  %data = getelementptr %token, ptr %to, i32 0, i32 1
+  %51 = load ptr, ptr %data, align 8
+  call void (ptr, ...) @printf(ptr @17, ptr %51)
+  br label %merge_block39
 
-merge_block48:                                    ; preds = %merge_block44, %then_block46
-  %type49 = getelementptr %token, ptr %to, i32 0, i32 0
-  %64 = load i64, ptr %type49, align 4
-  %65 = load i64, ptr @TOKEN_STRING, align 4
-  %66 = icmp eq i64 %64, %65
-  br i1 %66, label %then_block50, label %merge_block52
+merge_block39:                                    ; preds = %merge_block36, %then_block38
+  %type40 = getelementptr %token, ptr %to, i32 0, i32 0
+  %52 = load i64, ptr %type40, align 4
+  %53 = load i64, ptr @TOKEN_NUMBER, align 4
+  %54 = icmp eq i64 %52, %53
+  br i1 %54, label %then_block41, label %merge_block43
+
+then_block41:                                     ; preds = %merge_block39
+  %data42 = getelementptr %token, ptr %to, i32 0, i32 1
+  %55 = load ptr, ptr %data42, align 8
+  %56 = load i64, ptr %55, align 4
+  call void (ptr, ...) @printf(ptr @18, i64 %56)
+  br label %merge_block43
+
+merge_block43:                                    ; preds = %merge_block39, %then_block41
+  %type44 = getelementptr %token, ptr %to, i32 0, i32 0
+  %57 = load i64, ptr %type44, align 4
+  %58 = load i64, ptr @TOKEN_BOOLEAN, align 4
+  %59 = icmp eq i64 %57, %58
+  br i1 %59, label %then_block45, label %merge_block47
 
-then_block50:                                     ; preds = %merge_block48
-  %data51 = getelementptr %token, ptr %to, i32 0, i32 1
-  %67 = load ptr, ptr %data51, align 8
-  call void (ptr, ...) @printf(ptr @20, ptr %67)
-  br label %merge_block52
+then_block45:                                     ; preds = %merge_block43
+  %data46 = getelementptr %token, ptr %to, i32 0, i32 1
+  %60 = load ptr, ptr %data46, align 8
+  %61 = load i1, ptr %60, align 1
+  call void (ptr, ...) @printf(ptr @19, i1 %61)
+  br label %merge_block47
+
+merge_block47:                                    ; preds = %merge_block43, %then_block45
+  %type48 = getelementptr %token, ptr %to, i32 0, i32 0
+  %62 = load i64, ptr %type48, align 4
+  %63 = load i64, ptr @TOKEN_NULL, align 4
+  %64 = icmp eq i64 %62, %63
+  br i1 %64, label %then_block49, label %merge_block50
 
-merge_block52:                                    ; preds = %merge_block48, %then_block50
-  %type53 = getelementptr %token, ptr %to, i32 0, i32 0
-  %68 = load i64, ptr %type53, align 4
-  %69 = load i64, ptr @TOKEN_EQUALS, align 4
-  %70 = icmp eq i64 %68, %69
-  br i1 %70, label %then_block54, label %merge_block55
+then_block49:                                     ; preds = %merge_block47
+  call void (ptr, ...) @printf(ptr @20)
+  br label %merge_block50
 
-then_block54:                                     ; preds = %merge_block52
-  call void (ptr, ...) @printf(ptr @21)
-  br label %merge_block55
+merge_block50:                                    ; preds = %merge_block47, %then_block49
+  %type51 = getelementptr %token, ptr %to, i32 0, i32 0
+  %65 = load i64, ptr %type51, align 4
+  %66 = load i64, ptr @TOKEN_CHAR, align 4
+  %67 = icmp eq i64 %65, %66
+  br i1 %67, label %then_block52, label %merge_block54
+
+then_block52:                                     ; preds = %merge_block50
+  %data53 = getelementptr %token, ptr %to, i32 0, i32 1
+  %68 = load ptr, ptr %data53, align 8
+  %69 = load i8, ptr %68, align 1
+  call void (ptr, ...) @printf(ptr @21, i8 %69)
+  br label %merge_block54
 
-merge_block55:                                    ; preds = %merge_block52, %then_block54
-  %type56 = getelementptr %token, ptr %to, i32 0, i32 0
-  %71 = load i64, ptr %type56, align 4
-  %72 = load i64, ptr @TOKEN_PLUS, align 4
-  %73 = icmp eq i64 %71, %72
-  br i1 %73, label %then_block57, label %merge_block58
+merge_block54:                                    ; preds = %merge_block50, %then_block52
+  %type55 = getelementptr %token, ptr %to, i32 0, i32 0
+  %70 = load i64, ptr %type55, align 4
+  %71 = load i64, ptr @TOKEN_STRING, align 4
+  %72 = icmp eq i64 %70, %71
+  br i1 %72, label %then_block56, label %merge_block58
 
-then_block57:                                     ; preds = %merge_block55
-  call void (ptr, ...) @printf(ptr @22)
+then_block56:                                     ; preds = %merge_block54
+  %data57 = getelementptr %token, ptr %to, i32 0, i32 1
+  %73 = load ptr, ptr %data57, align 8
+  call void (ptr, ...) @printf(ptr @22, ptr %73)
   br label %merge_block58
 
-merge_block58:                                    ; preds = %merge_block55, %then_block57
+merge_block58:                                    ; preds = %merge_block54, %then_block56
   %type59 = getelementptr %token, ptr %to, i32 0, i32 0
   %74 = load i64, ptr %type59, align 4
-  %75 = load i64, ptr @TOKEN_MINUS, align 4
+  %75 = load i64, ptr @TOKEN_EQUALS, align 4
   %76 = icmp eq i64 %74, %75
   br i1 %76, label %then_block60, label %merge_block61
 
@@ -2411,7 +2423,7 @@ then_block60:                                     ; preds = %merge_block58
 merge_block61:                                    ; preds = %merge_block58, %then_block60
   %type62 = getelementptr %token, ptr %to, i32 0, i32 0
   %77 = load i64, ptr %type62, align 4
-  %78 = load i64, ptr @TOKEN_MUL, align 4
+  %78 = load i64, ptr @TOKEN_PLUS, align 4
   %79 = icmp eq i64 %77, %78
   br i1 %79, label %then_block63, label %merge_block64
 
@@ -2422,7 +2434,7 @@ then_block63:                                     ; preds = %merge_block61
 merge_block64:                                    ; preds = %merge_block61, %then_block63
   %type65 = getelementptr %token, ptr %to, i32 0, i32 0
   %80 = load i64, ptr %type65, align 4
-  %81 = load i64, ptr @TOKEN_DIV, align 4
+  %81 = load i64, ptr @TOKEN_MINUS, align 4
   %82 = icmp eq i64 %80, %81
   br i1 %82, label %then_block66, label %merge_block67
 
@@ -2433,7 +2445,7 @@ then_block66:                                     ; preds = %merge_block64
 merge_block67:                                    ; preds = %merge_block64, %then_block66
   %type68 = getelementptr %token, ptr %to, i32 0, i32 0
   %83 = load i64, ptr %type68, align 4
-  %84 = load i64, ptr @TOKEN_MOD, align 4
+  %84 = load i64, ptr @TOKEN_MUL, align 4
   %85 = icmp eq i64 %83, %84
   br i1 %85, label %then_block69, label %merge_block70
 
@@ -2444,7 +2456,7 @@ then_block69:                                     ; preds = %merge_block67
 merge_block70:                                    ; preds = %merge_block67, %then_block69
   %type71 = getelementptr %token, ptr %to, i32 0, i32 0
   %86 = load i64, ptr %type71, align 4
-  %87 = load i64, ptr @TOKEN_BANG, align 4
+  %87 = load i64, ptr @TOKEN_DIV, align 4
   %88 = icmp eq i64 %86, %87
   br i1 %88, label %then_block72, label %merge_block73
 
@@ -2455,7 +2467,7 @@ then_block72:                                     ; preds = %merge_block70
 merge_block73:                                    ; preds = %merge_block70, %then_block72
   %type74 = getelementptr %token, ptr %to, i32 0, i32 0
   %89 = load i64, ptr %type74, align 4
-  %90 = load i64, ptr @TOKEN_LESS, align 4
+  %90 = load i64, ptr @TOKEN_MOD, align 4
   %91 = icmp eq i64 %89, %90
   br i1 %91, label %then_block75, label %merge_block76
 
@@ -2466,7 +2478,7 @@ then_block75:                                     ; preds = %merge_block73
 merge_block76:                                    ; preds = %merge_block73, %then_block75
   %type77 = getelementptr %token, ptr %to, i32 0, i32 0
   %92 = load i64, ptr %type77, align 4
-  %93 = load i64, ptr @TOKEN_GREATER, align 4
+  %93 = load i64, ptr @TOKEN_BANG, align 4
   %94 = icmp eq i64 %92, %93
   br i1 %94, label %then_block78, label %merge_block79
 
@@ -2477,7 +2489,7 @@ then_block78:                                     ; preds = %merge_block76
 merge_block79:                                    ; preds = %merge_block76, %then_block78
   %type80 = getelementptr %token, ptr %to, i32 0, i32 0
   %95 = load i64, ptr %type80, align 4
-  %96 = load i64, ptr @TOKEN_DOT, align 4
+  %96 = load i64, ptr @TOKEN_LESS, align 4
   %97 = icmp eq i64 %95, %96
   br i1 %97, label %then_block81, label %merge_block82
 
@@ -2488,7 +2500,7 @@ then_block81:                                     ; preds = %merge_block79
 merge_block82:                                    ; preds = %merge_block79, %then_block81
   %type83 = getelementptr %token, ptr %to, i32 0, i32 0
   %98 = load i64, ptr %type83, align 4
-  %99 = load i64, ptr @TOKEN_SEMICOLON, align 4
+  %99 = load i64, ptr @TOKEN_GREATER, align 4
   %100 = icmp eq i64 %98, %99
   br i1 %100, label %then_block84, label %merge_block85
 
@@ -2499,7 +2511,7 @@ then_block84:                                     ; preds = %merge_block82
 merge_block85:                                    ; preds = %merge_block82, %then_block84
   %type86 = getelementptr %token, ptr %to, i32 0, i32 0
   %101 = load i64, ptr %type86, align 4
-  %102 = load i64, ptr @TOKEN_COMMA, align 4
+  %102 = load i64, ptr @TOKEN_DOT, align 4
   %103 = icmp eq i64 %101, %102
   br i1 %103, label %then_block87, label %merge_block88
 
@@ -2510,7 +2522,7 @@ then_block87:                                     ; preds = %merge_block85
 merge_block88:                                    ; preds = %merge_block85, %then_block87
   %type89 = getelementptr %token, ptr %to, i32 0, i32 0
   %104 = load i64, ptr %type89, align 4
-  %105 = load i64, ptr @TOKEN_COLON, align 4
+  %105 = load i64, ptr @TOKEN_SEMICOLON, align 4
   %106 = icmp eq i64 %104, %105
   br i1 %106, label %then_block90, label %merge_block91
 
@@ -2521,7 +2533,7 @@ then_block90:                                     ; preds = %merge_block88
 merge_block91:                                    ; preds = %merge_block88, %then_block90
   %type92 = getelementptr %token, ptr %to, i32 0, i32 0
   %107 = load i64, ptr %type92, align 4
-  %108 = load i64, ptr @TOKEN_LPAREN, align 4
+  %108 = load i64, ptr @TOKEN_COMMA, align 4
   %109 = icmp eq i64 %107, %108
   br i1 %109, label %then_block93, label %merge_block94
 
@@ -2532,7 +2544,7 @@ then_block93:                                     ; preds = %merge_block91
 merge_block94:                                    ; preds = %merge_block91, %then_block93
   %type95 = getelementptr %token, ptr %to, i32 0, i32 0
   %110 = load i64, ptr %type95, align 4
-  %111 = load i64, ptr @TOKEN_RPAREN, align 4
+  %111 = load i64, ptr @TOKEN_COLON, align 4
   %112 = icmp eq i64 %110, %111
   br i1 %112, label %then_block96, label %merge_block97
 
@@ -2543,7 +2555,7 @@ then_block96:                                     ; preds = %merge_block94
 merge_block97:                                    ; preds = %merge_block94, %then_block96
   %type98 = getelementptr %token, ptr %to, i32 0, i32 0
   %113 = load i64, ptr %type98, align 4
-  %114 = load i64, ptr @TOKEN_LBRACE, align 4
+  %114 = load i64, ptr @TOKEN_LPAREN, align 4
   %115 = icmp eq i64 %113, %114
   br i1 %115, label %then_block99, label %merge_block100
 
@@ -2554,7 +2566,7 @@ then_block99:                                     ; preds = %merge_block97
 merge_block100:                                   ; preds = %merge_block97, %then_block99
   %type101 = getelementptr %token, ptr %to, i32 0, i32 0
   %116 = load i64, ptr %type101, align 4
-  %117 = load i64, ptr @TOKEN_RBRACE, align 4
+  %117 = load i64, ptr @TOKEN_RPAREN, align 4
   %118 = icmp eq i64 %116, %117
   br i1 %118, label %then_block102, label %merge_block103
 
@@ -2563,427 +2575,471 @@ then_block102:                                    ; preds = %merge_block100
   br label %merge_block103
 
 merge_block103:                                   ; preds = %merge_block100, %then_block102
-  %119 = load i64, ptr %i, align 4
-  %120 = add i64 %119, 1
-  store i64 %120, ptr %i, align 4
-  br label %while_block
-
-entrypoint104:                                    ; No predecessors!
-  %ts105 = alloca ptr, align 8
-  store ptr %0, ptr %ts105, align 8
-  %ts_len106 = alloca i64, align 8
-  store i64 %1, ptr %ts_len106, align 4
-  %i107 = alloca i64, align 8
-  store i64 0, ptr %i107, align 4
-  br label %while_block108
-
-while_block108:                                   ; preds = %merge_block218, %entrypoint104
-  %121 = load i64, ptr %i107, align 4
-  %122 = load i64, ptr %ts_len106, align 4
-  %123 = icmp slt i64 %121, %122
-  br i1 %123, label %inner_block109, label %outer_block110
-
-inner_block109:                                   ; preds = %while_block108
-  %124 = load ptr, ptr %ts105, align 8
-  %125 = load i64, ptr %i107, align 4
-  %126 = getelementptr %token.2, ptr %124, i64 %125
-  %127 = load %token.2, ptr %126, align 8
-  %to111 = alloca %token.2, align 8
-  store %token.2 %127, ptr %to111, align 8
-  %type112 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %128 = load i64, ptr %type112, align 4
-  %129 = load i64, ptr @TOKEN_IMPORT.4, align 4
-  %130 = icmp eq i64 %128, %129
-  br i1 %130, label %then_block113, label %merge_block114
-
-outer_block110:                                   ; preds = %while_block108
-  ret i64 0
+  %type104 = getelementptr %token, ptr %to, i32 0, i32 0
+  %119 = load i64, ptr %type104, align 4
+  %120 = load i64, ptr @TOKEN_LBRACE, align 4
+  %121 = icmp eq i64 %119, %120
+  br i1 %121, label %then_block105, label %merge_block106
+
+then_block105:                                    ; preds = %merge_block103
+  call void (ptr, ...) @printf(ptr @38)
+  br label %merge_block106
 
-then_block113:                                    ; preds = %inner_block109
-  call void (ptr, ...) @printf(ptr @82)
-  br label %merge_block114
+merge_block106:                                   ; preds = %merge_block103, %then_block105
+  %type107 = getelementptr %token, ptr %to, i32 0, i32 0
+  %122 = load i64, ptr %type107, align 4
+  %123 = load i64, ptr @TOKEN_RBRACE, align 4
+  %124 = icmp eq i64 %122, %123
+  br i1 %124, label %then_block108, label %merge_block109
 
-merge_block114:                                   ; preds = %inner_block109, %then_block113
-  %type115 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %131 = load i64, ptr %type115, align 4
-  %132 = load i64, ptr @TOKEN_LET.5, align 4
-  %133 = icmp eq i64 %131, %132
-  br i1 %133, label %then_block116, label %merge_block117
+then_block108:                                    ; preds = %merge_block106
+  call void (ptr, ...) @printf(ptr @39)
+  br label %merge_block109
 
-then_block116:                                    ; preds = %merge_block114
-  call void (ptr, ...) @printf(ptr @83)
-  br label %merge_block117
+merge_block109:                                   ; preds = %merge_block106, %then_block108
+  %125 = load i64, ptr %i, align 4
+  %126 = add i64 %125, 1
+  store i64 %126, ptr %i, align 4
+  br label %while_block
 
-merge_block117:                                   ; preds = %merge_block114, %then_block116
-  %type118 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+entrypoint110:                                    ; No predecessors!
+  %ts111 = alloca ptr, align 8
+  store ptr %0, ptr %ts111, align 8
+  %ts_len112 = alloca i64, align 8
+  store i64 %1, ptr %ts_len112, align 4
+  %i113 = alloca i64, align 8
+  store i64 0, ptr %i113, align 4
+  br label %while_block114
+
+while_block114:                                   ; preds = %merge_block230, %entrypoint110
+  %127 = load i64, ptr %i113, align 4
+  %128 = load i64, ptr %ts_len112, align 4
+  %129 = icmp slt i64 %127, %128
+  br i1 %129, label %inner_block115, label %outer_block116
+
+inner_block115:                                   ; preds = %while_block114
+  %130 = load ptr, ptr %ts111, align 8
+  %131 = load i64, ptr %i113, align 4
+  %132 = getelementptr %token.2, ptr %130, i64 %131
+  %133 = load %token.2, ptr %132, align 8
+  %to117 = alloca %token.2, align 8
+  store %token.2 %133, ptr %to117, align 8
+  %type118 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %134 = load i64, ptr %type118, align 4
-  %135 = load i64, ptr @TOKEN_EXTERN.6, align 4
+  %135 = load i64, ptr @TOKEN_IMPORT.4, align 4
   %136 = icmp eq i64 %134, %135
   br i1 %136, label %then_block119, label %merge_block120
 
-then_block119:                                    ; preds = %merge_block117
-  call void (ptr, ...) @printf(ptr @84)
+outer_block116:                                   ; preds = %while_block114
+  ret i64 0
+
+then_block119:                                    ; preds = %inner_block115
+  call void (ptr, ...) @printf(ptr @86)
   br label %merge_block120
 
-merge_block120:                                   ; preds = %merge_block117, %then_block119
-  %type121 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+merge_block120:                                   ; preds = %inner_block115, %then_block119
+  %type121 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %137 = load i64, ptr %type121, align 4
-  %138 = load i64, ptr @TOKEN_IF.7, align 4
+  %138 = load i64, ptr @TOKEN_LET.5, align 4
   %139 = icmp eq i64 %137, %138
   br i1 %139, label %then_block122, label %merge_block123
 
 then_block122:                                    ; preds = %merge_block120
-  call void (ptr, ...) @printf(ptr @85)
+  call void (ptr, ...) @printf(ptr @87)
   br label %merge_block123
 
 merge_block123:                                   ; preds = %merge_block120, %then_block122
-  %type124 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type124 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %140 = load i64, ptr %type124, align 4
-  %141 = load i64, ptr @TOKEN_WHILE.8, align 4
+  %141 = load i64, ptr @TOKEN_EXTERN.6, align 4
   %142 = icmp eq i64 %140, %141
   br i1 %142, label %then_block125, label %merge_block126
 
 then_block125:                                    ; preds = %merge_block123
-  call void (ptr, ...) @printf(ptr @86)
+  call void (ptr, ...) @printf(ptr @88)
   br label %merge_block126
 
 merge_block126:                                   ; preds = %merge_block123, %then_block125
-  %type127 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type127 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %143 = load i64, ptr %type127, align 4
-  %144 = load i64, ptr @TOKEN_RETURN.9, align 4
+  %144 = load i64, ptr @TOKEN_IF.7, align 4
   %145 = icmp eq i64 %143, %144
   br i1 %145, label %then_block128, label %merge_block129
 
 then_block128:                                    ; preds = %merge_block126
-  call void (ptr, ...) @printf(ptr @87)
+  call void (ptr, ...) @printf(ptr @89)
   br label %merge_block129
 
 merge_block129:                                   ; preds = %merge_block126, %then_block128
-  %type130 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type130 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %146 = load i64, ptr %type130, align 4
-  %147 = load i64, ptr @TOKEN_BREAK.10, align 4
+  %147 = load i64, ptr @TOKEN_WHILE.8, align 4
   %148 = icmp eq i64 %146, %147
   br i1 %148, label %then_block131, label %merge_block132
 
 then_block131:                                    ; preds = %merge_block129
-  call void (ptr, ...) @printf(ptr @88)
+  call void (ptr, ...) @printf(ptr @90)
   br label %merge_block132
 
 merge_block132:                                   ; preds = %merge_block129, %then_block131
-  %type133 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type133 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %149 = load i64, ptr %type133, align 4
-  %150 = load i64, ptr @TOKEN_CONTINUE.11, align 4
+  %150 = load i64, ptr @TOKEN_RETURN.9, align 4
   %151 = icmp eq i64 %149, %150
   br i1 %151, label %then_block134, label %merge_block135
 
 then_block134:                                    ; preds = %merge_block132
-  call void (ptr, ...) @printf(ptr @89)
+  call void (ptr, ...) @printf(ptr @91)
   br label %merge_block135
 
 merge_block135:                                   ; preds = %merge_block132, %then_block134
-  %type136 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type136 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %152 = load i64, ptr %type136, align 4
-  %153 = load i64, ptr @TOKEN_ARROW.12, align 4
+  %153 = load i64, ptr @TOKEN_BREAK.10, align 4
   %154 = icmp eq i64 %152, %153
   br i1 %154, label %then_block137, label %merge_block138
 
 then_block137:                                    ; preds = %merge_block135
-  call void (ptr, ...) @printf(ptr @90)
+  call void (ptr, ...) @printf(ptr @92)
   br label %merge_block138
 
 merge_block138:                                   ; preds = %merge_block135, %then_block137
-  %type139 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type139 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %155 = load i64, ptr %type139, align 4
-  %156 = load i64, ptr @TOKEN_STRUCT.13, align 4
+  %156 = load i64, ptr @TOKEN_CONTINUE.11, align 4
   %157 = icmp eq i64 %155, %156
   br i1 %157, label %then_block140, label %merge_block141
 
 then_block140:                                    ; preds = %merge_block138
-  call void (ptr, ...) @printf(ptr @91)
+  call void (ptr, ...) @printf(ptr @93)
   br label %merge_block141
 
 merge_block141:                                   ; preds = %merge_block138, %then_block140
-  %type142 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type142 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %158 = load i64, ptr %type142, align 4
-  %159 = load i64, ptr @TOKEN_TYPE.14, align 4
+  %159 = load i64, ptr @TOKEN_ARROW.12, align 4
   %160 = icmp eq i64 %158, %159
   br i1 %160, label %then_block143, label %merge_block144
 
 then_block143:                                    ; preds = %merge_block141
-  call void (ptr, ...) @printf(ptr @92)
+  call void (ptr, ...) @printf(ptr @94)
   br label %merge_block144
 
 merge_block144:                                   ; preds = %merge_block141, %then_block143
-  %type145 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type145 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %161 = load i64, ptr %type145, align 4
-  %162 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %162 = load i64, ptr @TOKEN_STRUCT.13, align 4
   %163 = icmp eq i64 %161, %162
-  br i1 %163, label %then_block146, label %merge_block148
+  br i1 %163, label %then_block146, label %merge_block147
 
 then_block146:                                    ; preds = %merge_block144
-  %data147 = getelementptr %token.2, ptr %to111, i32 0, i32 1
-  %164 = load ptr, ptr %data147, align 8
-  call void (ptr, ...) @printf(ptr @93, ptr %164)
-  br label %merge_block148
-
-merge_block148:                                   ; preds = %merge_block144, %then_block146
-  %type149 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %165 = load i64, ptr %type149, align 4
-  %166 = load i64, ptr @TOKEN_NUMBER.16, align 4
-  %167 = icmp eq i64 %165, %166
-  br i1 %167, label %then_block150, label %merge_block152
-
-then_block150:                                    ; preds = %merge_block148
-  %data151 = getelementptr %token.2, ptr %to111, i32 0, i32 1
-  %168 = load ptr, ptr %data151, align 8
-  %169 = load i64, ptr %168, align 4
-  call void (ptr, ...) @printf(ptr @94, i64 %169)
-  br label %merge_block152
-
-merge_block152:                                   ; preds = %merge_block148, %then_block150
-  %type153 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %170 = load i64, ptr %type153, align 4
-  %171 = load i64, ptr @TOKEN_BOOLEAN.17, align 4
-  %172 = icmp eq i64 %170, %171
-  br i1 %172, label %then_block154, label %merge_block156
-
-then_block154:                                    ; preds = %merge_block152
-  %data155 = getelementptr %token.2, ptr %to111, i32 0, i32 1
-  %173 = load ptr, ptr %data155, align 8
-  %174 = load i1, ptr %173, align 1
-  call void (ptr, ...) @printf(ptr @95, i1 %174)
-  br label %merge_block156
+  call void (ptr, ...) @printf(ptr @95)
+  br label %merge_block147
 
-merge_block156:                                   ; preds = %merge_block152, %then_block154
-  %type157 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %175 = load i64, ptr %type157, align 4
-  %176 = load i64, ptr @TOKEN_NULL.18, align 4
-  %177 = icmp eq i64 %175, %176
-  br i1 %177, label %then_block158, label %merge_block159
+merge_block147:                                   ; preds = %merge_block144, %then_block146
+  %type148 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %164 = load i64, ptr %type148, align 4
+  %165 = load i64, ptr @TOKEN_TYPE.14, align 4
+  %166 = icmp eq i64 %164, %165
+  br i1 %166, label %then_block149, label %merge_block150
 
-then_block158:                                    ; preds = %merge_block156
+then_block149:                                    ; preds = %merge_block147
   call void (ptr, ...) @printf(ptr @96)
-  br label %merge_block159
-
-merge_block159:                                   ; preds = %merge_block156, %then_block158
-  %type160 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %178 = load i64, ptr %type160, align 4
-  %179 = load i64, ptr @TOKEN_CHAR.19, align 4
-  %180 = icmp eq i64 %178, %179
-  br i1 %180, label %then_block161, label %merge_block163
-
-then_block161:                                    ; preds = %merge_block159
-  %data162 = getelementptr %token.2, ptr %to111, i32 0, i32 1
-  %181 = load ptr, ptr %data162, align 8
-  %182 = load i8, ptr %181, align 1
-  call void (ptr, ...) @printf(ptr @97, i8 %182)
-  br label %merge_block163
-
-merge_block163:                                   ; preds = %merge_block159, %then_block161
-  %type164 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %183 = load i64, ptr %type164, align 4
-  %184 = load i64, ptr @TOKEN_STRING.20, align 4
-  %185 = icmp eq i64 %183, %184
-  br i1 %185, label %then_block165, label %merge_block167
-
-then_block165:                                    ; preds = %merge_block163
-  %data166 = getelementptr %token.2, ptr %to111, i32 0, i32 1
-  %186 = load ptr, ptr %data166, align 8
-  call void (ptr, ...) @printf(ptr @98, ptr %186)
-  br label %merge_block167
-
-merge_block167:                                   ; preds = %merge_block163, %then_block165
-  %type168 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %187 = load i64, ptr %type168, align 4
-  %188 = load i64, ptr @TOKEN_EQUALS.21, align 4
-  %189 = icmp eq i64 %187, %188
-  br i1 %189, label %then_block169, label %merge_block170
+  br label %merge_block150
 
-then_block169:                                    ; preds = %merge_block167
-  call void (ptr, ...) @printf(ptr @99)
-  br label %merge_block170
+merge_block150:                                   ; preds = %merge_block147, %then_block149
+  %type151 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %167 = load i64, ptr %type151, align 4
+  %168 = load i64, ptr @TOKEN_AND.15, align 4
+  %169 = icmp eq i64 %167, %168
+  br i1 %169, label %then_block152, label %merge_block153
 
-merge_block170:                                   ; preds = %merge_block167, %then_block169
-  %type171 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %190 = load i64, ptr %type171, align 4
-  %191 = load i64, ptr @TOKEN_PLUS.22, align 4
-  %192 = icmp eq i64 %190, %191
-  br i1 %192, label %then_block172, label %merge_block173
+then_block152:                                    ; preds = %merge_block150
+  call void (ptr, ...) @printf(ptr @97)
+  br label %merge_block153
 
-then_block172:                                    ; preds = %merge_block170
-  call void (ptr, ...) @printf(ptr @100)
-  br label %merge_block173
+merge_block153:                                   ; preds = %merge_block150, %then_block152
+  %type154 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %170 = load i64, ptr %type154, align 4
+  %171 = load i64, ptr @TOKEN_OR.16, align 4
+  %172 = icmp eq i64 %170, %171
+  br i1 %172, label %then_block155, label %merge_block156
 
-merge_block173:                                   ; preds = %merge_block170, %then_block172
-  %type174 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %193 = load i64, ptr %type174, align 4
-  %194 = load i64, ptr @TOKEN_MINUS.23, align 4
-  %195 = icmp eq i64 %193, %194
-  br i1 %195, label %then_block175, label %merge_block176
+then_block155:                                    ; preds = %merge_block153
+  call void (ptr, ...) @printf(ptr @98)
+  br label %merge_block156
 
-then_block175:                                    ; preds = %merge_block173
-  call void (ptr, ...) @printf(ptr @101)
-  br label %merge_block176
+merge_block156:                                   ; preds = %merge_block153, %then_block155
+  %type157 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %173 = load i64, ptr %type157, align 4
+  %174 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
+  %175 = icmp eq i64 %173, %174
+  br i1 %175, label %then_block158, label %merge_block160
 
-merge_block176:                                   ; preds = %merge_block173, %then_block175
-  %type177 = getelementptr %token.2, ptr %to111, i32 0, i32 0
-  %196 = load i64, ptr %type177, align 4
-  %197 = load i64, ptr @TOKEN_MUL.24, align 4
-  %198 = icmp eq i64 %196, %197
-  br i1 %198, label %then_block178, label %merge_block179
+then_block158:                                    ; preds = %merge_block156
+  %data159 = getelementptr %token.2, ptr %to117, i32 0, i32 1
+  %176 = load ptr, ptr %data159, align 8
+  call void (ptr, ...) @printf(ptr @99, ptr %176)
+  br label %merge_block160
+
+merge_block160:                                   ; preds = %merge_block156, %then_block158
+  %type161 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %177 = load i64, ptr %type161, align 4
+  %178 = load i64, ptr @TOKEN_NUMBER.18, align 4
+  %179 = icmp eq i64 %177, %178
+  br i1 %179, label %then_block162, label %merge_block164
+
+then_block162:                                    ; preds = %merge_block160
+  %data163 = getelementptr %token.2, ptr %to117, i32 0, i32 1
+  %180 = load ptr, ptr %data163, align 8
+  %181 = load i64, ptr %180, align 4
+  call void (ptr, ...) @printf(ptr @100, i64 %181)
+  br label %merge_block164
+
+merge_block164:                                   ; preds = %merge_block160, %then_block162
+  %type165 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %182 = load i64, ptr %type165, align 4
+  %183 = load i64, ptr @TOKEN_BOOLEAN.19, align 4
+  %184 = icmp eq i64 %182, %183
+  br i1 %184, label %then_block166, label %merge_block168
+
+then_block166:                                    ; preds = %merge_block164
+  %data167 = getelementptr %token.2, ptr %to117, i32 0, i32 1
+  %185 = load ptr, ptr %data167, align 8
+  %186 = load i1, ptr %185, align 1
+  call void (ptr, ...) @printf(ptr @101, i1 %186)
+  br label %merge_block168
+
+merge_block168:                                   ; preds = %merge_block164, %then_block166
+  %type169 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %187 = load i64, ptr %type169, align 4
+  %188 = load i64, ptr @TOKEN_NULL.20, align 4
+  %189 = icmp eq i64 %187, %188
+  br i1 %189, label %then_block170, label %merge_block171
 
-then_block178:                                    ; preds = %merge_block176
+then_block170:                                    ; preds = %merge_block168
   call void (ptr, ...) @printf(ptr @102)
+  br label %merge_block171
+
+merge_block171:                                   ; preds = %merge_block168, %then_block170
+  %type172 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %190 = load i64, ptr %type172, align 4
+  %191 = load i64, ptr @TOKEN_CHAR.21, align 4
+  %192 = icmp eq i64 %190, %191
+  br i1 %192, label %then_block173, label %merge_block175
+
+then_block173:                                    ; preds = %merge_block171
+  %data174 = getelementptr %token.2, ptr %to117, i32 0, i32 1
+  %193 = load ptr, ptr %data174, align 8
+  %194 = load i8, ptr %193, align 1
+  call void (ptr, ...) @printf(ptr @103, i8 %194)
+  br label %merge_block175
+
+merge_block175:                                   ; preds = %merge_block171, %then_block173
+  %type176 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %195 = load i64, ptr %type176, align 4
+  %196 = load i64, ptr @TOKEN_STRING.22, align 4
+  %197 = icmp eq i64 %195, %196
+  br i1 %197, label %then_block177, label %merge_block179
+
+then_block177:                                    ; preds = %merge_block175
+  %data178 = getelementptr %token.2, ptr %to117, i32 0, i32 1
+  %198 = load ptr, ptr %data178, align 8
+  call void (ptr, ...) @printf(ptr @104, ptr %198)
   br label %merge_block179
 
-merge_block179:                                   ; preds = %merge_block176, %then_block178
-  %type180 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+merge_block179:                                   ; preds = %merge_block175, %then_block177
+  %type180 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %199 = load i64, ptr %type180, align 4
-  %200 = load i64, ptr @TOKEN_DIV.25, align 4
+  %200 = load i64, ptr @TOKEN_EQUALS.23, align 4
   %201 = icmp eq i64 %199, %200
   br i1 %201, label %then_block181, label %merge_block182
 
 then_block181:                                    ; preds = %merge_block179
-  call void (ptr, ...) @printf(ptr @103)
+  call void (ptr, ...) @printf(ptr @105)
   br label %merge_block182
 
 merge_block182:                                   ; preds = %merge_block179, %then_block181
-  %type183 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type183 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %202 = load i64, ptr %type183, align 4
-  %203 = load i64, ptr @TOKEN_MOD.26, align 4
+  %203 = load i64, ptr @TOKEN_PLUS.24, align 4
   %204 = icmp eq i64 %202, %203
   br i1 %204, label %then_block184, label %merge_block185
 
 then_block184:                                    ; preds = %merge_block182
-  call void (ptr, ...) @printf(ptr @104)
+  call void (ptr, ...) @printf(ptr @106)
   br label %merge_block185
 
 merge_block185:                                   ; preds = %merge_block182, %then_block184
-  %type186 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type186 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %205 = load i64, ptr %type186, align 4
-  %206 = load i64, ptr @TOKEN_BANG.27, align 4
+  %206 = load i64, ptr @TOKEN_MINUS.25, align 4
   %207 = icmp eq i64 %205, %206
   br i1 %207, label %then_block187, label %merge_block188
 
 then_block187:                                    ; preds = %merge_block185
-  call void (ptr, ...) @printf(ptr @105)
+  call void (ptr, ...) @printf(ptr @107)
   br label %merge_block188
 
 merge_block188:                                   ; preds = %merge_block185, %then_block187
-  %type189 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type189 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %208 = load i64, ptr %type189, align 4
-  %209 = load i64, ptr @TOKEN_LESS.28, align 4
+  %209 = load i64, ptr @TOKEN_MUL.26, align 4
   %210 = icmp eq i64 %208, %209
   br i1 %210, label %then_block190, label %merge_block191
 
 then_block190:                                    ; preds = %merge_block188
-  call void (ptr, ...) @printf(ptr @106)
+  call void (ptr, ...) @printf(ptr @108)
   br label %merge_block191
 
 merge_block191:                                   ; preds = %merge_block188, %then_block190
-  %type192 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type192 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %211 = load i64, ptr %type192, align 4
-  %212 = load i64, ptr @TOKEN_GREATER.29, align 4
+  %212 = load i64, ptr @TOKEN_DIV.27, align 4
   %213 = icmp eq i64 %211, %212
   br i1 %213, label %then_block193, label %merge_block194
 
 then_block193:                                    ; preds = %merge_block191
-  call void (ptr, ...) @printf(ptr @107)
+  call void (ptr, ...) @printf(ptr @109)
   br label %merge_block194
 
 merge_block194:                                   ; preds = %merge_block191, %then_block193
-  %type195 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type195 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %214 = load i64, ptr %type195, align 4
-  %215 = load i64, ptr @TOKEN_DOT.30, align 4
+  %215 = load i64, ptr @TOKEN_MOD.28, align 4
   %216 = icmp eq i64 %214, %215
   br i1 %216, label %then_block196, label %merge_block197
 
 then_block196:                                    ; preds = %merge_block194
-  call void (ptr, ...) @printf(ptr @108)
+  call void (ptr, ...) @printf(ptr @110)
   br label %merge_block197
 
 merge_block197:                                   ; preds = %merge_block194, %then_block196
-  %type198 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type198 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %217 = load i64, ptr %type198, align 4
-  %218 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %218 = load i64, ptr @TOKEN_BANG.29, align 4
   %219 = icmp eq i64 %217, %218
   br i1 %219, label %then_block199, label %merge_block200
 
 then_block199:                                    ; preds = %merge_block197
-  call void (ptr, ...) @printf(ptr @109)
+  call void (ptr, ...) @printf(ptr @111)
   br label %merge_block200
 
 merge_block200:                                   ; preds = %merge_block197, %then_block199
-  %type201 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type201 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %220 = load i64, ptr %type201, align 4
-  %221 = load i64, ptr @TOKEN_COMMA.32, align 4
+  %221 = load i64, ptr @TOKEN_LESS.30, align 4
   %222 = icmp eq i64 %220, %221
   br i1 %222, label %then_block202, label %merge_block203
 
 then_block202:                                    ; preds = %merge_block200
-  call void (ptr, ...) @printf(ptr @110)
+  call void (ptr, ...) @printf(ptr @112)
   br label %merge_block203
 
 merge_block203:                                   ; preds = %merge_block200, %then_block202
-  %type204 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type204 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %223 = load i64, ptr %type204, align 4
-  %224 = load i64, ptr @TOKEN_COLON.33, align 4
+  %224 = load i64, ptr @TOKEN_GREATER.31, align 4
   %225 = icmp eq i64 %223, %224
   br i1 %225, label %then_block205, label %merge_block206
 
 then_block205:                                    ; preds = %merge_block203
-  call void (ptr, ...) @printf(ptr @111)
+  call void (ptr, ...) @printf(ptr @113)
   br label %merge_block206
 
 merge_block206:                                   ; preds = %merge_block203, %then_block205
-  %type207 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type207 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %226 = load i64, ptr %type207, align 4
-  %227 = load i64, ptr @TOKEN_LPAREN.34, align 4
+  %227 = load i64, ptr @TOKEN_DOT.32, align 4
   %228 = icmp eq i64 %226, %227
   br i1 %228, label %then_block208, label %merge_block209
 
 then_block208:                                    ; preds = %merge_block206
-  call void (ptr, ...) @printf(ptr @112)
+  call void (ptr, ...) @printf(ptr @114)
   br label %merge_block209
 
 merge_block209:                                   ; preds = %merge_block206, %then_block208
-  %type210 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type210 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %229 = load i64, ptr %type210, align 4
-  %230 = load i64, ptr @TOKEN_RPAREN.35, align 4
+  %230 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %231 = icmp eq i64 %229, %230
   br i1 %231, label %then_block211, label %merge_block212
 
 then_block211:                                    ; preds = %merge_block209
-  call void (ptr, ...) @printf(ptr @113)
+  call void (ptr, ...) @printf(ptr @115)
   br label %merge_block212
 
 merge_block212:                                   ; preds = %merge_block209, %then_block211
-  %type213 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type213 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %232 = load i64, ptr %type213, align 4
-  %233 = load i64, ptr @TOKEN_LBRACE.36, align 4
+  %233 = load i64, ptr @TOKEN_COMMA.34, align 4
   %234 = icmp eq i64 %232, %233
   br i1 %234, label %then_block214, label %merge_block215
 
 then_block214:                                    ; preds = %merge_block212
-  call void (ptr, ...) @printf(ptr @114)
+  call void (ptr, ...) @printf(ptr @116)
   br label %merge_block215
 
 merge_block215:                                   ; preds = %merge_block212, %then_block214
-  %type216 = getelementptr %token.2, ptr %to111, i32 0, i32 0
+  %type216 = getelementptr %token.2, ptr %to117, i32 0, i32 0
   %235 = load i64, ptr %type216, align 4
-  %236 = load i64, ptr @TOKEN_RBRACE.37, align 4
+  %236 = load i64, ptr @TOKEN_COLON.35, align 4
   %237 = icmp eq i64 %235, %236
   br i1 %237, label %then_block217, label %merge_block218
 
 then_block217:                                    ; preds = %merge_block215
-  call void (ptr, ...) @printf(ptr @115)
+  call void (ptr, ...) @printf(ptr @117)
   br label %merge_block218
 
 merge_block218:                                   ; preds = %merge_block215, %then_block217
-  %238 = load i64, ptr %i107, align 4
-  %239 = add i64 %238, 1
-  store i64 %239, ptr %i107, align 4
-  br label %while_block108
+  %type219 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %238 = load i64, ptr %type219, align 4
+  %239 = load i64, ptr @TOKEN_LPAREN.36, align 4
+  %240 = icmp eq i64 %238, %239
+  br i1 %240, label %then_block220, label %merge_block221
+
+then_block220:                                    ; preds = %merge_block218
+  call void (ptr, ...) @printf(ptr @118)
+  br label %merge_block221
+
+merge_block221:                                   ; preds = %merge_block218, %then_block220
+  %type222 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %241 = load i64, ptr %type222, align 4
+  %242 = load i64, ptr @TOKEN_RPAREN.37, align 4
+  %243 = icmp eq i64 %241, %242
+  br i1 %243, label %then_block223, label %merge_block224
+
+then_block223:                                    ; preds = %merge_block221
+  call void (ptr, ...) @printf(ptr @119)
+  br label %merge_block224
+
+merge_block224:                                   ; preds = %merge_block221, %then_block223
+  %type225 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %244 = load i64, ptr %type225, align 4
+  %245 = load i64, ptr @TOKEN_LBRACE.38, align 4
+  %246 = icmp eq i64 %244, %245
+  br i1 %246, label %then_block226, label %merge_block227
+
+then_block226:                                    ; preds = %merge_block224
+  call void (ptr, ...) @printf(ptr @120)
+  br label %merge_block227
+
+merge_block227:                                   ; preds = %merge_block224, %then_block226
+  %type228 = getelementptr %token.2, ptr %to117, i32 0, i32 0
+  %247 = load i64, ptr %type228, align 4
+  %248 = load i64, ptr @TOKEN_RBRACE.39, align 4
+  %249 = icmp eq i64 %247, %248
+  br i1 %249, label %then_block229, label %merge_block230
+
+then_block229:                                    ; preds = %merge_block227
+  call void (ptr, ...) @printf(ptr @121)
+  br label %merge_block230
+
+merge_block230:                                   ; preds = %merge_block227, %then_block229
+  %250 = load i64, ptr %i113, align 4
+  %251 = add i64 %250, 1
+  store i64 %251, ptr %i113, align 4
+  br label %while_block114
 }
 
 define void @tokenizer_skip_whitespace(ptr %0) {
@@ -3670,7 +3726,7 @@ entrypoint3:                                      ; No predecessors!
   %t4 = alloca ptr, align 8
   store ptr %0, ptr %t4, align 8
   %15 = load ptr, ptr %t4, align 8
-  %16 = call ptr @tokenizer_consume_until_condition(ptr %15, ptr @unnamed_func.38)
+  %16 = call ptr @tokenizer_consume_until_condition(ptr %15, ptr @unnamed_func.40)
   %string5 = alloca ptr, align 8
   store ptr %16, ptr %string5, align 8
   %17 = load ptr, ptr %string5, align 8
@@ -3724,7 +3780,7 @@ entrypoint:
   %prev_offset = alloca i64, align 8
   store i64 %2, ptr %prev_offset, align 4
   %3 = load ptr, ptr %t, align 8
-  %4 = call i1 @tokenizer_accept_string(ptr %3, ptr @38)
+  %4 = call i1 @tokenizer_accept_string(ptr %3, ptr @40)
   %5 = icmp eq i1 %4, false
   br i1 %5, label %then_block, label %merge_block
 
@@ -3741,7 +3797,7 @@ merge_block:                                      ; preds = %entrypoint
   %string = alloca ptr, align 8
   store ptr %9, ptr %string, align 8
   %10 = load ptr, ptr %t, align 8
-  %11 = call i1 @tokenizer_accept_string(ptr %10, ptr @39)
+  %11 = call i1 @tokenizer_accept_string(ptr %10, ptr @41)
   %12 = icmp eq i1 %11, false
   br i1 %12, label %then_block2, label %merge_block4
 
@@ -3765,7 +3821,7 @@ entrypoint5:                                      ; No predecessors!
   %prev_offset8 = alloca i64, align 8
   store i64 %17, ptr %prev_offset8, align 4
   %18 = load ptr, ptr %t6, align 8
-  %19 = call i1 @tokenizer_accept_string(ptr %18, ptr @116)
+  %19 = call i1 @tokenizer_accept_string(ptr %18, ptr @122)
   %20 = icmp eq i1 %19, false
   br i1 %20, label %then_block9, label %merge_block11
 
@@ -3778,11 +3834,11 @@ then_block9:                                      ; preds = %entrypoint5
 
 merge_block11:                                    ; preds = %entrypoint5
   %23 = load ptr, ptr %t6, align 8
-  %24 = call ptr @tokenizer_consume_until_condition(ptr %23, ptr @unnamed_func.39)
+  %24 = call ptr @tokenizer_consume_until_condition(ptr %23, ptr @unnamed_func.41)
   %string12 = alloca ptr, align 8
   store ptr %24, ptr %string12, align 8
   %25 = load ptr, ptr %t6, align 8
-  %26 = call i1 @tokenizer_accept_string(ptr %25, ptr @117)
+  %26 = call i1 @tokenizer_accept_string(ptr %25, ptr @123)
   %27 = icmp eq i1 %26, false
   br i1 %27, label %then_block13, label %merge_block15
 
@@ -3817,7 +3873,7 @@ entrypoint:
   %prev_offset = alloca i64, align 8
   store i64 %2, ptr %prev_offset, align 4
   %3 = load ptr, ptr %t, align 8
-  %4 = call i1 @tokenizer_accept_string(ptr %3, ptr @40)
+  %4 = call i1 @tokenizer_accept_string(ptr %3, ptr @42)
   %5 = icmp eq i1 %4, false
   br i1 %5, label %then_block, label %merge_block
 
@@ -3834,7 +3890,7 @@ merge_block:                                      ; preds = %entrypoint
   %string = alloca ptr, align 8
   store ptr %9, ptr %string, align 8
   %10 = load ptr, ptr %t, align 8
-  %11 = call i1 @tokenizer_accept_string(ptr %10, ptr @41)
+  %11 = call i1 @tokenizer_accept_string(ptr %10, ptr @43)
   %12 = icmp eq i1 %11, false
   br i1 %12, label %then_block2, label %merge_block4
 
@@ -3858,7 +3914,7 @@ entrypoint5:                                      ; No predecessors!
   %prev_offset8 = alloca i64, align 8
   store i64 %17, ptr %prev_offset8, align 4
   %18 = load ptr, ptr %t6, align 8
-  %19 = call i1 @tokenizer_accept_string(ptr %18, ptr @118)
+  %19 = call i1 @tokenizer_accept_string(ptr %18, ptr @124)
   %20 = icmp eq i1 %19, false
   br i1 %20, label %then_block9, label %merge_block11
 
@@ -3871,11 +3927,11 @@ then_block9:                                      ; preds = %entrypoint5
 
 merge_block11:                                    ; preds = %entrypoint5
   %23 = load ptr, ptr %t6, align 8
-  %24 = call ptr @tokenizer_consume_until_condition(ptr %23, ptr @unnamed_func.40)
+  %24 = call ptr @tokenizer_consume_until_condition(ptr %23, ptr @unnamed_func.42)
   %string12 = alloca ptr, align 8
   store ptr %24, ptr %string12, align 8
   %25 = load ptr, ptr %t6, align 8
-  %26 = call i1 @tokenizer_accept_string(ptr %25, ptr @119)
+  %26 = call i1 @tokenizer_accept_string(ptr %25, ptr @125)
   %27 = icmp eq i1 %26, false
   br i1 %27, label %then_block13, label %merge_block15
 
@@ -3905,7 +3961,7 @@ entrypoint:
   %t = alloca ptr, align 8
   store ptr %0, ptr %t, align 8
   %1 = load ptr, ptr %t, align 8
-  %2 = call i1 @tokenizer_accept_string(ptr %1, ptr @42)
+  %2 = call i1 @tokenizer_accept_string(ptr %1, ptr @44)
   %3 = icmp eq i1 %2, false
   br i1 %3, label %then_block, label %merge_block
 
@@ -3917,7 +3973,7 @@ merge_block:                                      ; preds = %entrypoint
 
 while_block:                                      ; preds = %inner_block, %merge_block
   %4 = load ptr, ptr %t, align 8
-  %5 = call i1 @tokenizer_accept_string(ptr %4, ptr @43)
+  %5 = call i1 @tokenizer_accept_string(ptr %4, ptr @45)
   %6 = icmp eq i1 %5, false
   br i1 %6, label %inner_block, label %outer_block
 
@@ -3938,7 +3994,7 @@ entrypoint2:                                      ; No predecessors!
   %t3 = alloca ptr, align 8
   store ptr %0, ptr %t3, align 8
   %11 = load ptr, ptr %t3, align 8
-  %12 = call i1 @tokenizer_accept_string(ptr %11, ptr @120)
+  %12 = call i1 @tokenizer_accept_string(ptr %11, ptr @126)
   %13 = icmp eq i1 %12, false
   br i1 %13, label %then_block4, label %merge_block5
 
@@ -3950,7 +4006,7 @@ merge_block5:                                     ; preds = %entrypoint2
 
 while_block6:                                     ; preds = %inner_block7, %merge_block5
   %14 = load ptr, ptr %t3, align 8
-  %15 = call i1 @tokenizer_accept_string(ptr %14, ptr @121)
+  %15 = call i1 @tokenizer_accept_string(ptr %14, ptr @127)
   %16 = icmp eq i1 %15, false
   br i1 %16, label %inner_block7, label %outer_block8
 
@@ -3998,7 +4054,7 @@ merge_block:                                      ; preds = %entrypoint
   %to = alloca ptr, align 8
   store ptr %11, ptr %to, align 8
   %12 = load ptr, ptr %t, align 8
-  %13 = call i1 @tokenizer_accept_string(ptr %12, ptr @44)
+  %13 = call i1 @tokenizer_accept_string(ptr %12, ptr @46)
   br i1 %13, label %then_block1, label %merge_block2
 
 then_block1:                                      ; preds = %merge_block
@@ -4011,7 +4067,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %17 = load ptr, ptr %t, align 8
-  %18 = call i1 @tokenizer_accept_string(ptr %17, ptr @45)
+  %18 = call i1 @tokenizer_accept_string(ptr %17, ptr @47)
   br i1 %18, label %then_block3, label %merge_block5
 
 then_block3:                                      ; preds = %merge_block2
@@ -4024,7 +4080,7 @@ then_block3:                                      ; preds = %merge_block2
 
 merge_block5:                                     ; preds = %merge_block2
   %22 = load ptr, ptr %t, align 8
-  %23 = call i1 @tokenizer_accept_string(ptr %22, ptr @46)
+  %23 = call i1 @tokenizer_accept_string(ptr %22, ptr @48)
   br i1 %23, label %then_block6, label %merge_block8
 
 then_block6:                                      ; preds = %merge_block5
@@ -4037,7 +4093,7 @@ then_block6:                                      ; preds = %merge_block5
 
 merge_block8:                                     ; preds = %merge_block5
   %27 = load ptr, ptr %t, align 8
-  %28 = call i1 @tokenizer_accept_string(ptr %27, ptr @47)
+  %28 = call i1 @tokenizer_accept_string(ptr %27, ptr @49)
   br i1 %28, label %then_block9, label %merge_block11
 
 then_block9:                                      ; preds = %merge_block8
@@ -4050,7 +4106,7 @@ then_block9:                                      ; preds = %merge_block8
 
 merge_block11:                                    ; preds = %merge_block8
   %32 = load ptr, ptr %t, align 8
-  %33 = call i1 @tokenizer_accept_string(ptr %32, ptr @48)
+  %33 = call i1 @tokenizer_accept_string(ptr %32, ptr @50)
   br i1 %33, label %then_block12, label %merge_block14
 
 then_block12:                                     ; preds = %merge_block11
@@ -4063,7 +4119,7 @@ then_block12:                                     ; preds = %merge_block11
 
 merge_block14:                                    ; preds = %merge_block11
   %37 = load ptr, ptr %t, align 8
-  %38 = call i1 @tokenizer_accept_string(ptr %37, ptr @49)
+  %38 = call i1 @tokenizer_accept_string(ptr %37, ptr @51)
   br i1 %38, label %then_block15, label %merge_block17
 
 then_block15:                                     ; preds = %merge_block14
@@ -4076,7 +4132,7 @@ then_block15:                                     ; preds = %merge_block14
 
 merge_block17:                                    ; preds = %merge_block14
   %42 = load ptr, ptr %t, align 8
-  %43 = call i1 @tokenizer_accept_string(ptr %42, ptr @50)
+  %43 = call i1 @tokenizer_accept_string(ptr %42, ptr @52)
   br i1 %43, label %then_block18, label %merge_block20
 
 then_block18:                                     ; preds = %merge_block17
@@ -4089,7 +4145,7 @@ then_block18:                                     ; preds = %merge_block17
 
 merge_block20:                                    ; preds = %merge_block17
   %47 = load ptr, ptr %t, align 8
-  %48 = call i1 @tokenizer_accept_string(ptr %47, ptr @51)
+  %48 = call i1 @tokenizer_accept_string(ptr %47, ptr @53)
   br i1 %48, label %then_block21, label %merge_block23
 
 then_block21:                                     ; preds = %merge_block20
@@ -4102,7 +4158,7 @@ then_block21:                                     ; preds = %merge_block20
 
 merge_block23:                                    ; preds = %merge_block20
   %52 = load ptr, ptr %t, align 8
-  %53 = call i1 @tokenizer_accept_string(ptr %52, ptr @52)
+  %53 = call i1 @tokenizer_accept_string(ptr %52, ptr @54)
   br i1 %53, label %then_block24, label %merge_block28
 
 then_block24:                                     ; preds = %merge_block23
@@ -4127,7 +4183,7 @@ then_block24:                                     ; preds = %merge_block23
 
 merge_block28:                                    ; preds = %merge_block23
   %63 = load ptr, ptr %t, align 8
-  %64 = call i1 @tokenizer_accept_string(ptr %63, ptr @53)
+  %64 = call i1 @tokenizer_accept_string(ptr %63, ptr @55)
   br i1 %64, label %then_block29, label %merge_block34
 
 then_block29:                                     ; preds = %merge_block28
@@ -4152,7 +4208,7 @@ then_block29:                                     ; preds = %merge_block28
 
 merge_block34:                                    ; preds = %merge_block28
   %74 = load ptr, ptr %t, align 8
-  %75 = call i1 @tokenizer_accept_string(ptr %74, ptr @54)
+  %75 = call i1 @tokenizer_accept_string(ptr %74, ptr @56)
   br i1 %75, label %then_block35, label %merge_block37
 
 then_block35:                                     ; preds = %merge_block34
@@ -4165,7 +4221,7 @@ then_block35:                                     ; preds = %merge_block34
 
 merge_block37:                                    ; preds = %merge_block34
   %79 = load ptr, ptr %t, align 8
-  %80 = call i1 @tokenizer_accept_string(ptr %79, ptr @55)
+  %80 = call i1 @tokenizer_accept_string(ptr %79, ptr @57)
   br i1 %80, label %then_block38, label %merge_block40
 
 then_block38:                                     ; preds = %merge_block37
@@ -4178,7 +4234,7 @@ then_block38:                                     ; preds = %merge_block37
 
 merge_block40:                                    ; preds = %merge_block37
   %84 = load ptr, ptr %t, align 8
-  %85 = call i1 @tokenizer_accept_string(ptr %84, ptr @56)
+  %85 = call i1 @tokenizer_accept_string(ptr %84, ptr @58)
   br i1 %85, label %then_block41, label %merge_block43
 
 then_block41:                                     ; preds = %merge_block40
@@ -4191,869 +4247,921 @@ then_block41:                                     ; preds = %merge_block40
 
 merge_block43:                                    ; preds = %merge_block40
   %89 = load ptr, ptr %t, align 8
-  %90 = call i1 @tokenizer_accept_string(ptr %89, ptr @57)
+  %90 = call i1 @tokenizer_accept_string(ptr %89, ptr @59)
   br i1 %90, label %then_block44, label %merge_block46
 
 then_block44:                                     ; preds = %merge_block43
   %91 = load ptr, ptr %to, align 8
   %type45 = getelementptr %token, ptr %91, i32 0, i32 0
-  %92 = load i64, ptr @TOKEN_ARROW, align 4
+  %92 = load i64, ptr @TOKEN_AND, align 4
   store i64 %92, ptr %type45, align 4
   %93 = load ptr, ptr %to, align 8
   ret ptr %93
 
 merge_block46:                                    ; preds = %merge_block43
   %94 = load ptr, ptr %t, align 8
-  %95 = call i1 @tokenizer_accept_string(ptr %94, ptr @58)
+  %95 = call i1 @tokenizer_accept_string(ptr %94, ptr @60)
   br i1 %95, label %then_block47, label %merge_block49
 
 then_block47:                                     ; preds = %merge_block46
   %96 = load ptr, ptr %to, align 8
   %type48 = getelementptr %token, ptr %96, i32 0, i32 0
-  %97 = load i64, ptr @TOKEN_SEMICOLON, align 4
+  %97 = load i64, ptr @TOKEN_OR, align 4
   store i64 %97, ptr %type48, align 4
   %98 = load ptr, ptr %to, align 8
   ret ptr %98
 
 merge_block49:                                    ; preds = %merge_block46
   %99 = load ptr, ptr %t, align 8
-  %100 = call i1 @tokenizer_accept_string(ptr %99, ptr @59)
+  %100 = call i1 @tokenizer_accept_string(ptr %99, ptr @61)
   br i1 %100, label %then_block50, label %merge_block52
 
 then_block50:                                     ; preds = %merge_block49
   %101 = load ptr, ptr %to, align 8
   %type51 = getelementptr %token, ptr %101, i32 0, i32 0
-  %102 = load i64, ptr @TOKEN_COMMA, align 4
+  %102 = load i64, ptr @TOKEN_ARROW, align 4
   store i64 %102, ptr %type51, align 4
   %103 = load ptr, ptr %to, align 8
   ret ptr %103
 
 merge_block52:                                    ; preds = %merge_block49
   %104 = load ptr, ptr %t, align 8
-  %105 = call i1 @tokenizer_accept_string(ptr %104, ptr @60)
+  %105 = call i1 @tokenizer_accept_string(ptr %104, ptr @62)
   br i1 %105, label %then_block53, label %merge_block55
 
 then_block53:                                     ; preds = %merge_block52
   %106 = load ptr, ptr %to, align 8
   %type54 = getelementptr %token, ptr %106, i32 0, i32 0
-  %107 = load i64, ptr @TOKEN_COLON, align 4
+  %107 = load i64, ptr @TOKEN_SEMICOLON, align 4
   store i64 %107, ptr %type54, align 4
   %108 = load ptr, ptr %to, align 8
   ret ptr %108
 
 merge_block55:                                    ; preds = %merge_block52
   %109 = load ptr, ptr %t, align 8
-  %110 = call i1 @tokenizer_accept_string(ptr %109, ptr @61)
+  %110 = call i1 @tokenizer_accept_string(ptr %109, ptr @63)
   br i1 %110, label %then_block56, label %merge_block58
 
 then_block56:                                     ; preds = %merge_block55
   %111 = load ptr, ptr %to, align 8
   %type57 = getelementptr %token, ptr %111, i32 0, i32 0
-  %112 = load i64, ptr @TOKEN_LPAREN, align 4
+  %112 = load i64, ptr @TOKEN_COMMA, align 4
   store i64 %112, ptr %type57, align 4
   %113 = load ptr, ptr %to, align 8
   ret ptr %113
 
 merge_block58:                                    ; preds = %merge_block55
   %114 = load ptr, ptr %t, align 8
-  %115 = call i1 @tokenizer_accept_string(ptr %114, ptr @62)
+  %115 = call i1 @tokenizer_accept_string(ptr %114, ptr @64)
   br i1 %115, label %then_block59, label %merge_block61
 
 then_block59:                                     ; preds = %merge_block58
   %116 = load ptr, ptr %to, align 8
   %type60 = getelementptr %token, ptr %116, i32 0, i32 0
-  %117 = load i64, ptr @TOKEN_RPAREN, align 4
+  %117 = load i64, ptr @TOKEN_COLON, align 4
   store i64 %117, ptr %type60, align 4
   %118 = load ptr, ptr %to, align 8
   ret ptr %118
 
 merge_block61:                                    ; preds = %merge_block58
   %119 = load ptr, ptr %t, align 8
-  %120 = call i1 @tokenizer_accept_string(ptr %119, ptr @63)
+  %120 = call i1 @tokenizer_accept_string(ptr %119, ptr @65)
   br i1 %120, label %then_block62, label %merge_block64
 
 then_block62:                                     ; preds = %merge_block61
   %121 = load ptr, ptr %to, align 8
   %type63 = getelementptr %token, ptr %121, i32 0, i32 0
-  %122 = load i64, ptr @TOKEN_LBRACE, align 4
+  %122 = load i64, ptr @TOKEN_LPAREN, align 4
   store i64 %122, ptr %type63, align 4
   %123 = load ptr, ptr %to, align 8
   ret ptr %123
 
 merge_block64:                                    ; preds = %merge_block61
   %124 = load ptr, ptr %t, align 8
-  %125 = call i1 @tokenizer_accept_string(ptr %124, ptr @64)
+  %125 = call i1 @tokenizer_accept_string(ptr %124, ptr @66)
   br i1 %125, label %then_block65, label %merge_block67
 
 then_block65:                                     ; preds = %merge_block64
   %126 = load ptr, ptr %to, align 8
   %type66 = getelementptr %token, ptr %126, i32 0, i32 0
-  %127 = load i64, ptr @TOKEN_RBRACE, align 4
+  %127 = load i64, ptr @TOKEN_RPAREN, align 4
   store i64 %127, ptr %type66, align 4
   %128 = load ptr, ptr %to, align 8
   ret ptr %128
 
 merge_block67:                                    ; preds = %merge_block64
   %129 = load ptr, ptr %t, align 8
-  %130 = call i1 @tokenizer_accept_string(ptr %129, ptr @65)
+  %130 = call i1 @tokenizer_accept_string(ptr %129, ptr @67)
   br i1 %130, label %then_block68, label %merge_block70
 
 then_block68:                                     ; preds = %merge_block67
   %131 = load ptr, ptr %to, align 8
   %type69 = getelementptr %token, ptr %131, i32 0, i32 0
-  %132 = load i64, ptr @TOKEN_EQUALS, align 4
+  %132 = load i64, ptr @TOKEN_LBRACE, align 4
   store i64 %132, ptr %type69, align 4
   %133 = load ptr, ptr %to, align 8
   ret ptr %133
 
 merge_block70:                                    ; preds = %merge_block67
   %134 = load ptr, ptr %t, align 8
-  %135 = call i1 @tokenizer_accept_string(ptr %134, ptr @66)
+  %135 = call i1 @tokenizer_accept_string(ptr %134, ptr @68)
   br i1 %135, label %then_block71, label %merge_block73
 
 then_block71:                                     ; preds = %merge_block70
   %136 = load ptr, ptr %to, align 8
   %type72 = getelementptr %token, ptr %136, i32 0, i32 0
-  %137 = load i64, ptr @TOKEN_PLUS, align 4
+  %137 = load i64, ptr @TOKEN_RBRACE, align 4
   store i64 %137, ptr %type72, align 4
   %138 = load ptr, ptr %to, align 8
   ret ptr %138
 
 merge_block73:                                    ; preds = %merge_block70
   %139 = load ptr, ptr %t, align 8
-  %140 = call i1 @tokenizer_accept_string(ptr %139, ptr @67)
+  %140 = call i1 @tokenizer_accept_string(ptr %139, ptr @69)
   br i1 %140, label %then_block74, label %merge_block76
 
 then_block74:                                     ; preds = %merge_block73
   %141 = load ptr, ptr %to, align 8
   %type75 = getelementptr %token, ptr %141, i32 0, i32 0
-  %142 = load i64, ptr @TOKEN_MINUS, align 4
+  %142 = load i64, ptr @TOKEN_EQUALS, align 4
   store i64 %142, ptr %type75, align 4
   %143 = load ptr, ptr %to, align 8
   ret ptr %143
 
 merge_block76:                                    ; preds = %merge_block73
   %144 = load ptr, ptr %t, align 8
-  %145 = call i1 @tokenizer_accept_string(ptr %144, ptr @68)
+  %145 = call i1 @tokenizer_accept_string(ptr %144, ptr @70)
   br i1 %145, label %then_block77, label %merge_block79
 
 then_block77:                                     ; preds = %merge_block76
   %146 = load ptr, ptr %to, align 8
   %type78 = getelementptr %token, ptr %146, i32 0, i32 0
-  %147 = load i64, ptr @TOKEN_MUL, align 4
+  %147 = load i64, ptr @TOKEN_PLUS, align 4
   store i64 %147, ptr %type78, align 4
   %148 = load ptr, ptr %to, align 8
   ret ptr %148
 
 merge_block79:                                    ; preds = %merge_block76
   %149 = load ptr, ptr %t, align 8
-  %150 = call i1 @tokenizer_accept_string(ptr %149, ptr @69)
+  %150 = call i1 @tokenizer_accept_string(ptr %149, ptr @71)
   br i1 %150, label %then_block80, label %merge_block82
 
 then_block80:                                     ; preds = %merge_block79
   %151 = load ptr, ptr %to, align 8
   %type81 = getelementptr %token, ptr %151, i32 0, i32 0
-  %152 = load i64, ptr @TOKEN_DIV, align 4
+  %152 = load i64, ptr @TOKEN_MINUS, align 4
   store i64 %152, ptr %type81, align 4
   %153 = load ptr, ptr %to, align 8
   ret ptr %153
 
 merge_block82:                                    ; preds = %merge_block79
   %154 = load ptr, ptr %t, align 8
-  %155 = call i1 @tokenizer_accept_string(ptr %154, ptr @70)
+  %155 = call i1 @tokenizer_accept_string(ptr %154, ptr @72)
   br i1 %155, label %then_block83, label %merge_block85
 
 then_block83:                                     ; preds = %merge_block82
   %156 = load ptr, ptr %to, align 8
   %type84 = getelementptr %token, ptr %156, i32 0, i32 0
-  %157 = load i64, ptr @TOKEN_MOD, align 4
+  %157 = load i64, ptr @TOKEN_MUL, align 4
   store i64 %157, ptr %type84, align 4
   %158 = load ptr, ptr %to, align 8
   ret ptr %158
 
 merge_block85:                                    ; preds = %merge_block82
   %159 = load ptr, ptr %t, align 8
-  %160 = call i1 @tokenizer_accept_string(ptr %159, ptr @71)
+  %160 = call i1 @tokenizer_accept_string(ptr %159, ptr @73)
   br i1 %160, label %then_block86, label %merge_block88
 
 then_block86:                                     ; preds = %merge_block85
   %161 = load ptr, ptr %to, align 8
   %type87 = getelementptr %token, ptr %161, i32 0, i32 0
-  %162 = load i64, ptr @TOKEN_BANG, align 4
+  %162 = load i64, ptr @TOKEN_DIV, align 4
   store i64 %162, ptr %type87, align 4
   %163 = load ptr, ptr %to, align 8
   ret ptr %163
 
 merge_block88:                                    ; preds = %merge_block85
   %164 = load ptr, ptr %t, align 8
-  %165 = call i1 @tokenizer_accept_string(ptr %164, ptr @72)
+  %165 = call i1 @tokenizer_accept_string(ptr %164, ptr @74)
   br i1 %165, label %then_block89, label %merge_block91
 
 then_block89:                                     ; preds = %merge_block88
   %166 = load ptr, ptr %to, align 8
   %type90 = getelementptr %token, ptr %166, i32 0, i32 0
-  %167 = load i64, ptr @TOKEN_LESS, align 4
+  %167 = load i64, ptr @TOKEN_MOD, align 4
   store i64 %167, ptr %type90, align 4
   %168 = load ptr, ptr %to, align 8
   ret ptr %168
 
 merge_block91:                                    ; preds = %merge_block88
   %169 = load ptr, ptr %t, align 8
-  %170 = call i1 @tokenizer_accept_string(ptr %169, ptr @73)
+  %170 = call i1 @tokenizer_accept_string(ptr %169, ptr @75)
   br i1 %170, label %then_block92, label %merge_block94
 
 then_block92:                                     ; preds = %merge_block91
   %171 = load ptr, ptr %to, align 8
   %type93 = getelementptr %token, ptr %171, i32 0, i32 0
-  %172 = load i64, ptr @TOKEN_GREATER, align 4
+  %172 = load i64, ptr @TOKEN_BANG, align 4
   store i64 %172, ptr %type93, align 4
   %173 = load ptr, ptr %to, align 8
   ret ptr %173
 
 merge_block94:                                    ; preds = %merge_block91
   %174 = load ptr, ptr %t, align 8
-  %175 = call i1 @tokenizer_accept_string(ptr %174, ptr @74)
+  %175 = call i1 @tokenizer_accept_string(ptr %174, ptr @76)
   br i1 %175, label %then_block95, label %merge_block97
 
 then_block95:                                     ; preds = %merge_block94
   %176 = load ptr, ptr %to, align 8
   %type96 = getelementptr %token, ptr %176, i32 0, i32 0
-  %177 = load i64, ptr @TOKEN_DOT, align 4
+  %177 = load i64, ptr @TOKEN_LESS, align 4
   store i64 %177, ptr %type96, align 4
   %178 = load ptr, ptr %to, align 8
   ret ptr %178
 
 merge_block97:                                    ; preds = %merge_block94
   %179 = load ptr, ptr %t, align 8
-  %180 = call ptr @tokenizer_accept_int_type(ptr %179)
-  %maybe_int = alloca ptr, align 8
-  store ptr %180, ptr %maybe_int, align 8
-  %181 = load ptr, ptr %maybe_int, align 8
-  %182 = icmp ne ptr %181, null
-  br i1 %182, label %then_block98, label %merge_block101
+  %180 = call i1 @tokenizer_accept_string(ptr %179, ptr @77)
+  br i1 %180, label %then_block98, label %merge_block100
 
 then_block98:                                     ; preds = %merge_block97
+  %181 = load ptr, ptr %to, align 8
+  %type99 = getelementptr %token, ptr %181, i32 0, i32 0
+  %182 = load i64, ptr @TOKEN_GREATER, align 4
+  store i64 %182, ptr %type99, align 4
   %183 = load ptr, ptr %to, align 8
-  %type99 = getelementptr %token, ptr %183, i32 0, i32 0
-  %184 = load i64, ptr @TOKEN_NUMBER, align 4
-  store i64 %184, ptr %type99, align 4
-  %185 = load ptr, ptr %to, align 8
-  %data100 = getelementptr %token, ptr %185, i32 0, i32 1
-  %186 = load ptr, ptr %maybe_int, align 8
-  store ptr %186, ptr %data100, align 8
-  %187 = load ptr, ptr %to, align 8
-  ret ptr %187
-
-merge_block101:                                   ; preds = %merge_block97
-  %188 = load ptr, ptr %t, align 8
-  %189 = call ptr @tokenizer_accept_char_type(ptr %188)
+  ret ptr %183
+
+merge_block100:                                   ; preds = %merge_block97
+  %184 = load ptr, ptr %t, align 8
+  %185 = call i1 @tokenizer_accept_string(ptr %184, ptr @78)
+  br i1 %185, label %then_block101, label %merge_block103
+
+then_block101:                                    ; preds = %merge_block100
+  %186 = load ptr, ptr %to, align 8
+  %type102 = getelementptr %token, ptr %186, i32 0, i32 0
+  %187 = load i64, ptr @TOKEN_DOT, align 4
+  store i64 %187, ptr %type102, align 4
+  %188 = load ptr, ptr %to, align 8
+  ret ptr %188
+
+merge_block103:                                   ; preds = %merge_block100
+  %189 = load ptr, ptr %t, align 8
+  %190 = call ptr @tokenizer_accept_int_type(ptr %189)
+  %maybe_int = alloca ptr, align 8
+  store ptr %190, ptr %maybe_int, align 8
+  %191 = load ptr, ptr %maybe_int, align 8
+  %192 = icmp ne ptr %191, null
+  br i1 %192, label %then_block104, label %merge_block107
+
+then_block104:                                    ; preds = %merge_block103
+  %193 = load ptr, ptr %to, align 8
+  %type105 = getelementptr %token, ptr %193, i32 0, i32 0
+  %194 = load i64, ptr @TOKEN_NUMBER, align 4
+  store i64 %194, ptr %type105, align 4
+  %195 = load ptr, ptr %to, align 8
+  %data106 = getelementptr %token, ptr %195, i32 0, i32 1
+  %196 = load ptr, ptr %maybe_int, align 8
+  store ptr %196, ptr %data106, align 8
+  %197 = load ptr, ptr %to, align 8
+  ret ptr %197
+
+merge_block107:                                   ; preds = %merge_block103
+  %198 = load ptr, ptr %t, align 8
+  %199 = call ptr @tokenizer_accept_char_type(ptr %198)
   %maybe_char = alloca ptr, align 8
-  store ptr %189, ptr %maybe_char, align 8
-  %190 = load ptr, ptr %maybe_char, align 8
-  %191 = icmp ne ptr %190, null
-  br i1 %191, label %then_block102, label %merge_block105
-
-then_block102:                                    ; preds = %merge_block101
-  %192 = load ptr, ptr %to, align 8
-  %type103 = getelementptr %token, ptr %192, i32 0, i32 0
-  %193 = load i64, ptr @TOKEN_CHAR, align 4
-  store i64 %193, ptr %type103, align 4
-  %194 = load ptr, ptr %to, align 8
-  %data104 = getelementptr %token, ptr %194, i32 0, i32 1
-  %195 = load ptr, ptr %maybe_char, align 8
-  store ptr %195, ptr %data104, align 8
-  %196 = load ptr, ptr %to, align 8
-  ret ptr %196
-
-merge_block105:                                   ; preds = %merge_block101
-  %197 = load ptr, ptr %t, align 8
-  %198 = call ptr @tokenizer_accept_string_type(ptr %197)
-  %maybe_string = alloca ptr, align 8
-  store ptr %198, ptr %maybe_string, align 8
-  %199 = load ptr, ptr %maybe_string, align 8
-  %200 = icmp ne ptr %199, null
-  br i1 %200, label %then_block106, label %merge_block109
+  store ptr %199, ptr %maybe_char, align 8
+  %200 = load ptr, ptr %maybe_char, align 8
+  %201 = icmp ne ptr %200, null
+  br i1 %201, label %then_block108, label %merge_block111
 
-then_block106:                                    ; preds = %merge_block105
-  %201 = load ptr, ptr %to, align 8
-  %type107 = getelementptr %token, ptr %201, i32 0, i32 0
-  %202 = load i64, ptr @TOKEN_STRING, align 4
-  store i64 %202, ptr %type107, align 4
-  %203 = load ptr, ptr %to, align 8
-  %data108 = getelementptr %token, ptr %203, i32 0, i32 1
-  %204 = load ptr, ptr %maybe_string, align 8
-  store ptr %204, ptr %data108, align 8
-  %205 = load ptr, ptr %to, align 8
-  ret ptr %205
-
-merge_block109:                                   ; preds = %merge_block105
-  %206 = load ptr, ptr %t, align 8
-  %207 = call ptr @tokenizer_consume_until_condition(ptr %206, ptr @unnamed_func.3)
-  %string = alloca ptr, align 8
-  store ptr %207, ptr %string, align 8
-  %208 = load ptr, ptr %string, align 8
-  %209 = call i64 @strlen(ptr %208)
-  %210 = icmp eq i64 %209, 0
-  br i1 %210, label %then_block110, label %merge_block111
-
-then_block110:                                    ; preds = %merge_block109
-  call void (ptr, ...) @printf(ptr @75)
-  ret ptr null
+then_block108:                                    ; preds = %merge_block107
+  %202 = load ptr, ptr %to, align 8
+  %type109 = getelementptr %token, ptr %202, i32 0, i32 0
+  %203 = load i64, ptr @TOKEN_CHAR, align 4
+  store i64 %203, ptr %type109, align 4
+  %204 = load ptr, ptr %to, align 8
+  %data110 = getelementptr %token, ptr %204, i32 0, i32 1
+  %205 = load ptr, ptr %maybe_char, align 8
+  store ptr %205, ptr %data110, align 8
+  %206 = load ptr, ptr %to, align 8
+  ret ptr %206
+
+merge_block111:                                   ; preds = %merge_block107
+  %207 = load ptr, ptr %t, align 8
+  %208 = call ptr @tokenizer_accept_string_type(ptr %207)
+  %maybe_string = alloca ptr, align 8
+  store ptr %208, ptr %maybe_string, align 8
+  %209 = load ptr, ptr %maybe_string, align 8
+  %210 = icmp ne ptr %209, null
+  br i1 %210, label %then_block112, label %merge_block115
 
-merge_block111:                                   ; preds = %merge_block109
+then_block112:                                    ; preds = %merge_block111
   %211 = load ptr, ptr %to, align 8
-  %type112 = getelementptr %token, ptr %211, i32 0, i32 0
-  %212 = load i64, ptr @TOKEN_IDENTIFIER, align 4
-  store i64 %212, ptr %type112, align 4
+  %type113 = getelementptr %token, ptr %211, i32 0, i32 0
+  %212 = load i64, ptr @TOKEN_STRING, align 4
+  store i64 %212, ptr %type113, align 4
   %213 = load ptr, ptr %to, align 8
-  %data113 = getelementptr %token, ptr %213, i32 0, i32 1
-  %214 = load ptr, ptr %string, align 8
-  store ptr %214, ptr %data113, align 8
+  %data114 = getelementptr %token, ptr %213, i32 0, i32 1
+  %214 = load ptr, ptr %maybe_string, align 8
+  store ptr %214, ptr %data114, align 8
   %215 = load ptr, ptr %to, align 8
   ret ptr %215
 
-entrypoint114:                                    ; No predecessors!
-  %t115 = alloca ptr, align 8
-  store ptr %0, ptr %t115, align 8
-  %216 = load ptr, ptr %t115, align 8
-  call void @tokenizer_skip_whitespace(ptr %216)
-  %217 = load ptr, ptr %t115, align 8
-  call void @tokenizer_skip_comments(ptr %217)
-  %218 = load ptr, ptr %t115, align 8
-  call void @tokenizer_skip_whitespace(ptr %218)
-  %219 = load ptr, ptr %t115, align 8
-  %offset116 = getelementptr %tokenizer.3, ptr %219, i32 0, i32 2
-  %220 = load i64, ptr %offset116, align 4
-  %221 = load ptr, ptr %t115, align 8
-  %buf_len117 = getelementptr %tokenizer.3, ptr %221, i32 0, i32 1
-  %222 = load i64, ptr %buf_len117, align 4
-  %223 = icmp sge i64 %220, %222
-  br i1 %223, label %then_block118, label %merge_block119
-
-then_block118:                                    ; preds = %entrypoint114
+merge_block115:                                   ; preds = %merge_block111
+  %216 = load ptr, ptr %t, align 8
+  %217 = call ptr @tokenizer_consume_until_condition(ptr %216, ptr @unnamed_func.3)
+  %string = alloca ptr, align 8
+  store ptr %217, ptr %string, align 8
+  %218 = load ptr, ptr %string, align 8
+  %219 = call i64 @strlen(ptr %218)
+  %220 = icmp eq i64 %219, 0
+  br i1 %220, label %then_block116, label %merge_block117
+
+then_block116:                                    ; preds = %merge_block115
+  call void (ptr, ...) @printf(ptr @79)
+  ret ptr null
+
+merge_block117:                                   ; preds = %merge_block115
+  %221 = load ptr, ptr %to, align 8
+  %type118 = getelementptr %token, ptr %221, i32 0, i32 0
+  %222 = load i64, ptr @TOKEN_IDENTIFIER, align 4
+  store i64 %222, ptr %type118, align 4
+  %223 = load ptr, ptr %to, align 8
+  %data119 = getelementptr %token, ptr %223, i32 0, i32 1
+  %224 = load ptr, ptr %string, align 8
+  store ptr %224, ptr %data119, align 8
+  %225 = load ptr, ptr %to, align 8
+  ret ptr %225
+
+entrypoint120:                                    ; No predecessors!
+  %t121 = alloca ptr, align 8
+  store ptr %0, ptr %t121, align 8
+  %226 = load ptr, ptr %t121, align 8
+  call void @tokenizer_skip_whitespace(ptr %226)
+  %227 = load ptr, ptr %t121, align 8
+  call void @tokenizer_skip_comments(ptr %227)
+  %228 = load ptr, ptr %t121, align 8
+  call void @tokenizer_skip_whitespace(ptr %228)
+  %229 = load ptr, ptr %t121, align 8
+  %offset122 = getelementptr %tokenizer.3, ptr %229, i32 0, i32 2
+  %230 = load i64, ptr %offset122, align 4
+  %231 = load ptr, ptr %t121, align 8
+  %buf_len123 = getelementptr %tokenizer.3, ptr %231, i32 0, i32 1
+  %232 = load i64, ptr %buf_len123, align 4
+  %233 = icmp sge i64 %230, %232
+  br i1 %233, label %then_block124, label %merge_block125
+
+then_block124:                                    ; preds = %entrypoint120
   ret ptr null
 
-merge_block119:                                   ; preds = %entrypoint114
-  %224 = load ptr, ptr %t115, align 8
-  %arena120 = getelementptr %tokenizer.3, ptr %224, i32 0, i32 3
-  %225 = load ptr, ptr %arena120, align 8
-  %226 = call ptr @arena_alloc(ptr %225, i64 16)
-  %to121 = alloca ptr, align 8
-  store ptr %226, ptr %to121, align 8
-  %227 = load ptr, ptr %t115, align 8
-  %228 = call i1 @tokenizer_accept_string(ptr %227, ptr @122)
-  br i1 %228, label %then_block122, label %merge_block124
-
-then_block122:                                    ; preds = %merge_block119
-  %229 = load ptr, ptr %to121, align 8
-  %type123 = getelementptr %token.2, ptr %229, i32 0, i32 0
-  %230 = load i64, ptr @TOKEN_IMPORT.4, align 4
-  store i64 %230, ptr %type123, align 4
-  %231 = load ptr, ptr %to121, align 8
-  ret ptr %231
-
-merge_block124:                                   ; preds = %merge_block119
-  %232 = load ptr, ptr %t115, align 8
-  %233 = call i1 @tokenizer_accept_string(ptr %232, ptr @123)
-  br i1 %233, label %then_block125, label %merge_block127
-
-then_block125:                                    ; preds = %merge_block124
-  %234 = load ptr, ptr %to121, align 8
-  %type126 = getelementptr %token.2, ptr %234, i32 0, i32 0
-  %235 = load i64, ptr @TOKEN_LET.5, align 4
-  store i64 %235, ptr %type126, align 4
-  %236 = load ptr, ptr %to121, align 8
-  ret ptr %236
-
-merge_block127:                                   ; preds = %merge_block124
-  %237 = load ptr, ptr %t115, align 8
-  %238 = call i1 @tokenizer_accept_string(ptr %237, ptr @124)
+merge_block125:                                   ; preds = %entrypoint120
+  %234 = load ptr, ptr %t121, align 8
+  %arena126 = getelementptr %tokenizer.3, ptr %234, i32 0, i32 3
+  %235 = load ptr, ptr %arena126, align 8
+  %236 = call ptr @arena_alloc(ptr %235, i64 16)
+  %to127 = alloca ptr, align 8
+  store ptr %236, ptr %to127, align 8
+  %237 = load ptr, ptr %t121, align 8
+  %238 = call i1 @tokenizer_accept_string(ptr %237, ptr @128)
   br i1 %238, label %then_block128, label %merge_block130
 
-then_block128:                                    ; preds = %merge_block127
-  %239 = load ptr, ptr %to121, align 8
+then_block128:                                    ; preds = %merge_block125
+  %239 = load ptr, ptr %to127, align 8
   %type129 = getelementptr %token.2, ptr %239, i32 0, i32 0
-  %240 = load i64, ptr @TOKEN_EXTERN.6, align 4
+  %240 = load i64, ptr @TOKEN_IMPORT.4, align 4
   store i64 %240, ptr %type129, align 4
-  %241 = load ptr, ptr %to121, align 8
+  %241 = load ptr, ptr %to127, align 8
   ret ptr %241
 
-merge_block130:                                   ; preds = %merge_block127
-  %242 = load ptr, ptr %t115, align 8
-  %243 = call i1 @tokenizer_accept_string(ptr %242, ptr @125)
+merge_block130:                                   ; preds = %merge_block125
+  %242 = load ptr, ptr %t121, align 8
+  %243 = call i1 @tokenizer_accept_string(ptr %242, ptr @129)
   br i1 %243, label %then_block131, label %merge_block133
 
 then_block131:                                    ; preds = %merge_block130
-  %244 = load ptr, ptr %to121, align 8
+  %244 = load ptr, ptr %to127, align 8
   %type132 = getelementptr %token.2, ptr %244, i32 0, i32 0
-  %245 = load i64, ptr @TOKEN_IF.7, align 4
+  %245 = load i64, ptr @TOKEN_LET.5, align 4
   store i64 %245, ptr %type132, align 4
-  %246 = load ptr, ptr %to121, align 8
+  %246 = load ptr, ptr %to127, align 8
   ret ptr %246
 
 merge_block133:                                   ; preds = %merge_block130
-  %247 = load ptr, ptr %t115, align 8
-  %248 = call i1 @tokenizer_accept_string(ptr %247, ptr @126)
+  %247 = load ptr, ptr %t121, align 8
+  %248 = call i1 @tokenizer_accept_string(ptr %247, ptr @130)
   br i1 %248, label %then_block134, label %merge_block136
 
 then_block134:                                    ; preds = %merge_block133
-  %249 = load ptr, ptr %to121, align 8
+  %249 = load ptr, ptr %to127, align 8
   %type135 = getelementptr %token.2, ptr %249, i32 0, i32 0
-  %250 = load i64, ptr @TOKEN_WHILE.8, align 4
+  %250 = load i64, ptr @TOKEN_EXTERN.6, align 4
   store i64 %250, ptr %type135, align 4
-  %251 = load ptr, ptr %to121, align 8
+  %251 = load ptr, ptr %to127, align 8
   ret ptr %251
 
 merge_block136:                                   ; preds = %merge_block133
-  %252 = load ptr, ptr %t115, align 8
-  %253 = call i1 @tokenizer_accept_string(ptr %252, ptr @127)
+  %252 = load ptr, ptr %t121, align 8
+  %253 = call i1 @tokenizer_accept_string(ptr %252, ptr @131)
   br i1 %253, label %then_block137, label %merge_block139
 
 then_block137:                                    ; preds = %merge_block136
-  %254 = load ptr, ptr %to121, align 8
+  %254 = load ptr, ptr %to127, align 8
   %type138 = getelementptr %token.2, ptr %254, i32 0, i32 0
-  %255 = load i64, ptr @TOKEN_RETURN.9, align 4
+  %255 = load i64, ptr @TOKEN_IF.7, align 4
   store i64 %255, ptr %type138, align 4
-  %256 = load ptr, ptr %to121, align 8
+  %256 = load ptr, ptr %to127, align 8
   ret ptr %256
 
 merge_block139:                                   ; preds = %merge_block136
-  %257 = load ptr, ptr %t115, align 8
-  %258 = call i1 @tokenizer_accept_string(ptr %257, ptr @128)
+  %257 = load ptr, ptr %t121, align 8
+  %258 = call i1 @tokenizer_accept_string(ptr %257, ptr @132)
   br i1 %258, label %then_block140, label %merge_block142
 
 then_block140:                                    ; preds = %merge_block139
-  %259 = load ptr, ptr %to121, align 8
+  %259 = load ptr, ptr %to127, align 8
   %type141 = getelementptr %token.2, ptr %259, i32 0, i32 0
-  %260 = load i64, ptr @TOKEN_BREAK.10, align 4
+  %260 = load i64, ptr @TOKEN_WHILE.8, align 4
   store i64 %260, ptr %type141, align 4
-  %261 = load ptr, ptr %to121, align 8
+  %261 = load ptr, ptr %to127, align 8
   ret ptr %261
 
 merge_block142:                                   ; preds = %merge_block139
-  %262 = load ptr, ptr %t115, align 8
-  %263 = call i1 @tokenizer_accept_string(ptr %262, ptr @129)
+  %262 = load ptr, ptr %t121, align 8
+  %263 = call i1 @tokenizer_accept_string(ptr %262, ptr @133)
   br i1 %263, label %then_block143, label %merge_block145
 
 then_block143:                                    ; preds = %merge_block142
-  %264 = load ptr, ptr %to121, align 8
+  %264 = load ptr, ptr %to127, align 8
   %type144 = getelementptr %token.2, ptr %264, i32 0, i32 0
-  %265 = load i64, ptr @TOKEN_CONTINUE.11, align 4
+  %265 = load i64, ptr @TOKEN_RETURN.9, align 4
   store i64 %265, ptr %type144, align 4
-  %266 = load ptr, ptr %to121, align 8
+  %266 = load ptr, ptr %to127, align 8
   ret ptr %266
 
 merge_block145:                                   ; preds = %merge_block142
-  %267 = load ptr, ptr %t115, align 8
-  %268 = call i1 @tokenizer_accept_string(ptr %267, ptr @130)
-  br i1 %268, label %then_block146, label %merge_block151
+  %267 = load ptr, ptr %t121, align 8
+  %268 = call i1 @tokenizer_accept_string(ptr %267, ptr @134)
+  br i1 %268, label %then_block146, label %merge_block148
 
 then_block146:                                    ; preds = %merge_block145
-  %269 = load ptr, ptr %to121, align 8
+  %269 = load ptr, ptr %to127, align 8
   %type147 = getelementptr %token.2, ptr %269, i32 0, i32 0
-  %270 = load i64, ptr @TOKEN_BOOLEAN.17, align 4
+  %270 = load i64, ptr @TOKEN_BREAK.10, align 4
   store i64 %270, ptr %type147, align 4
-  %271 = load ptr, ptr %t115, align 8
-  %arena148 = getelementptr %tokenizer.3, ptr %271, i32 0, i32 3
-  %272 = load ptr, ptr %arena148, align 8
-  %273 = call ptr @arena_alloc(ptr %272, i64 1)
-  %data149 = alloca ptr, align 8
-  store ptr %273, ptr %data149, align 8
-  %274 = load ptr, ptr %data149, align 8
-  store i1 true, ptr %274, align 1
-  %275 = load ptr, ptr %to121, align 8
-  %data150 = getelementptr %token.2, ptr %275, i32 0, i32 1
-  %276 = load ptr, ptr %data149, align 8
-  store ptr %276, ptr %data150, align 8
-  %277 = load ptr, ptr %to121, align 8
-  ret ptr %277
-
-merge_block151:                                   ; preds = %merge_block145
-  %278 = load ptr, ptr %t115, align 8
-  %279 = call i1 @tokenizer_accept_string(ptr %278, ptr @131)
-  br i1 %279, label %then_block152, label %merge_block157
+  %271 = load ptr, ptr %to127, align 8
+  ret ptr %271
+
+merge_block148:                                   ; preds = %merge_block145
+  %272 = load ptr, ptr %t121, align 8
+  %273 = call i1 @tokenizer_accept_string(ptr %272, ptr @135)
+  br i1 %273, label %then_block149, label %merge_block151
+
+then_block149:                                    ; preds = %merge_block148
+  %274 = load ptr, ptr %to127, align 8
+  %type150 = getelementptr %token.2, ptr %274, i32 0, i32 0
+  %275 = load i64, ptr @TOKEN_CONTINUE.11, align 4
+  store i64 %275, ptr %type150, align 4
+  %276 = load ptr, ptr %to127, align 8
+  ret ptr %276
+
+merge_block151:                                   ; preds = %merge_block148
+  %277 = load ptr, ptr %t121, align 8
+  %278 = call i1 @tokenizer_accept_string(ptr %277, ptr @136)
+  br i1 %278, label %then_block152, label %merge_block157
 
 then_block152:                                    ; preds = %merge_block151
-  %280 = load ptr, ptr %to121, align 8
-  %type153 = getelementptr %token.2, ptr %280, i32 0, i32 0
-  %281 = load i64, ptr @TOKEN_BOOLEAN.17, align 4
-  store i64 %281, ptr %type153, align 4
-  %282 = load ptr, ptr %t115, align 8
-  %arena154 = getelementptr %tokenizer.3, ptr %282, i32 0, i32 3
-  %283 = load ptr, ptr %arena154, align 8
-  %284 = call ptr @arena_alloc(ptr %283, i64 1)
+  %279 = load ptr, ptr %to127, align 8
+  %type153 = getelementptr %token.2, ptr %279, i32 0, i32 0
+  %280 = load i64, ptr @TOKEN_BOOLEAN.19, align 4
+  store i64 %280, ptr %type153, align 4
+  %281 = load ptr, ptr %t121, align 8
+  %arena154 = getelementptr %tokenizer.3, ptr %281, i32 0, i32 3
+  %282 = load ptr, ptr %arena154, align 8
+  %283 = call ptr @arena_alloc(ptr %282, i64 1)
   %data155 = alloca ptr, align 8
-  store ptr %284, ptr %data155, align 8
-  %285 = load ptr, ptr %data155, align 8
-  store i1 false, ptr %285, align 1
-  %286 = load ptr, ptr %to121, align 8
-  %data156 = getelementptr %token.2, ptr %286, i32 0, i32 1
-  %287 = load ptr, ptr %data155, align 8
-  store ptr %287, ptr %data156, align 8
-  %288 = load ptr, ptr %to121, align 8
-  ret ptr %288
+  store ptr %283, ptr %data155, align 8
+  %284 = load ptr, ptr %data155, align 8
+  store i1 true, ptr %284, align 1
+  %285 = load ptr, ptr %to127, align 8
+  %data156 = getelementptr %token.2, ptr %285, i32 0, i32 1
+  %286 = load ptr, ptr %data155, align 8
+  store ptr %286, ptr %data156, align 8
+  %287 = load ptr, ptr %to127, align 8
+  ret ptr %287
 
 merge_block157:                                   ; preds = %merge_block151
-  %289 = load ptr, ptr %t115, align 8
-  %290 = call i1 @tokenizer_accept_string(ptr %289, ptr @132)
-  br i1 %290, label %then_block158, label %merge_block160
+  %288 = load ptr, ptr %t121, align 8
+  %289 = call i1 @tokenizer_accept_string(ptr %288, ptr @137)
+  br i1 %289, label %then_block158, label %merge_block163
 
 then_block158:                                    ; preds = %merge_block157
-  %291 = load ptr, ptr %to121, align 8
-  %type159 = getelementptr %token.2, ptr %291, i32 0, i32 0
-  %292 = load i64, ptr @TOKEN_NULL.18, align 4
-  store i64 %292, ptr %type159, align 4
-  %293 = load ptr, ptr %to121, align 8
-  ret ptr %293
-
-merge_block160:                                   ; preds = %merge_block157
-  %294 = load ptr, ptr %t115, align 8
-  %295 = call i1 @tokenizer_accept_string(ptr %294, ptr @133)
-  br i1 %295, label %then_block161, label %merge_block163
-
-then_block161:                                    ; preds = %merge_block160
-  %296 = load ptr, ptr %to121, align 8
-  %type162 = getelementptr %token.2, ptr %296, i32 0, i32 0
-  %297 = load i64, ptr @TOKEN_STRUCT.13, align 4
-  store i64 %297, ptr %type162, align 4
-  %298 = load ptr, ptr %to121, align 8
+  %290 = load ptr, ptr %to127, align 8
+  %type159 = getelementptr %token.2, ptr %290, i32 0, i32 0
+  %291 = load i64, ptr @TOKEN_BOOLEAN.19, align 4
+  store i64 %291, ptr %type159, align 4
+  %292 = load ptr, ptr %t121, align 8
+  %arena160 = getelementptr %tokenizer.3, ptr %292, i32 0, i32 3
+  %293 = load ptr, ptr %arena160, align 8
+  %294 = call ptr @arena_alloc(ptr %293, i64 1)
+  %data161 = alloca ptr, align 8
+  store ptr %294, ptr %data161, align 8
+  %295 = load ptr, ptr %data161, align 8
+  store i1 false, ptr %295, align 1
+  %296 = load ptr, ptr %to127, align 8
+  %data162 = getelementptr %token.2, ptr %296, i32 0, i32 1
+  %297 = load ptr, ptr %data161, align 8
+  store ptr %297, ptr %data162, align 8
+  %298 = load ptr, ptr %to127, align 8
   ret ptr %298
 
-merge_block163:                                   ; preds = %merge_block160
-  %299 = load ptr, ptr %t115, align 8
-  %300 = call i1 @tokenizer_accept_string(ptr %299, ptr @134)
+merge_block163:                                   ; preds = %merge_block157
+  %299 = load ptr, ptr %t121, align 8
+  %300 = call i1 @tokenizer_accept_string(ptr %299, ptr @138)
   br i1 %300, label %then_block164, label %merge_block166
 
 then_block164:                                    ; preds = %merge_block163
-  %301 = load ptr, ptr %to121, align 8
+  %301 = load ptr, ptr %to127, align 8
   %type165 = getelementptr %token.2, ptr %301, i32 0, i32 0
-  %302 = load i64, ptr @TOKEN_TYPE.14, align 4
+  %302 = load i64, ptr @TOKEN_NULL.20, align 4
   store i64 %302, ptr %type165, align 4
-  %303 = load ptr, ptr %to121, align 8
+  %303 = load ptr, ptr %to127, align 8
   ret ptr %303
 
 merge_block166:                                   ; preds = %merge_block163
-  %304 = load ptr, ptr %t115, align 8
-  %305 = call i1 @tokenizer_accept_string(ptr %304, ptr @135)
+  %304 = load ptr, ptr %t121, align 8
+  %305 = call i1 @tokenizer_accept_string(ptr %304, ptr @139)
   br i1 %305, label %then_block167, label %merge_block169
 
 then_block167:                                    ; preds = %merge_block166
-  %306 = load ptr, ptr %to121, align 8
+  %306 = load ptr, ptr %to127, align 8
   %type168 = getelementptr %token.2, ptr %306, i32 0, i32 0
-  %307 = load i64, ptr @TOKEN_ARROW.12, align 4
+  %307 = load i64, ptr @TOKEN_STRUCT.13, align 4
   store i64 %307, ptr %type168, align 4
-  %308 = load ptr, ptr %to121, align 8
+  %308 = load ptr, ptr %to127, align 8
   ret ptr %308
 
 merge_block169:                                   ; preds = %merge_block166
-  %309 = load ptr, ptr %t115, align 8
-  %310 = call i1 @tokenizer_accept_string(ptr %309, ptr @136)
+  %309 = load ptr, ptr %t121, align 8
+  %310 = call i1 @tokenizer_accept_string(ptr %309, ptr @140)
   br i1 %310, label %then_block170, label %merge_block172
 
 then_block170:                                    ; preds = %merge_block169
-  %311 = load ptr, ptr %to121, align 8
+  %311 = load ptr, ptr %to127, align 8
   %type171 = getelementptr %token.2, ptr %311, i32 0, i32 0
-  %312 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %312 = load i64, ptr @TOKEN_TYPE.14, align 4
   store i64 %312, ptr %type171, align 4
-  %313 = load ptr, ptr %to121, align 8
+  %313 = load ptr, ptr %to127, align 8
   ret ptr %313
 
 merge_block172:                                   ; preds = %merge_block169
-  %314 = load ptr, ptr %t115, align 8
-  %315 = call i1 @tokenizer_accept_string(ptr %314, ptr @137)
+  %314 = load ptr, ptr %t121, align 8
+  %315 = call i1 @tokenizer_accept_string(ptr %314, ptr @141)
   br i1 %315, label %then_block173, label %merge_block175
 
 then_block173:                                    ; preds = %merge_block172
-  %316 = load ptr, ptr %to121, align 8
+  %316 = load ptr, ptr %to127, align 8
   %type174 = getelementptr %token.2, ptr %316, i32 0, i32 0
-  %317 = load i64, ptr @TOKEN_COMMA.32, align 4
+  %317 = load i64, ptr @TOKEN_AND.15, align 4
   store i64 %317, ptr %type174, align 4
-  %318 = load ptr, ptr %to121, align 8
+  %318 = load ptr, ptr %to127, align 8
   ret ptr %318
 
 merge_block175:                                   ; preds = %merge_block172
-  %319 = load ptr, ptr %t115, align 8
-  %320 = call i1 @tokenizer_accept_string(ptr %319, ptr @138)
+  %319 = load ptr, ptr %t121, align 8
+  %320 = call i1 @tokenizer_accept_string(ptr %319, ptr @142)
   br i1 %320, label %then_block176, label %merge_block178
 
 then_block176:                                    ; preds = %merge_block175
-  %321 = load ptr, ptr %to121, align 8
+  %321 = load ptr, ptr %to127, align 8
   %type177 = getelementptr %token.2, ptr %321, i32 0, i32 0
-  %322 = load i64, ptr @TOKEN_COLON.33, align 4
+  %322 = load i64, ptr @TOKEN_OR.16, align 4
   store i64 %322, ptr %type177, align 4
-  %323 = load ptr, ptr %to121, align 8
+  %323 = load ptr, ptr %to127, align 8
   ret ptr %323
 
 merge_block178:                                   ; preds = %merge_block175
-  %324 = load ptr, ptr %t115, align 8
-  %325 = call i1 @tokenizer_accept_string(ptr %324, ptr @139)
+  %324 = load ptr, ptr %t121, align 8
+  %325 = call i1 @tokenizer_accept_string(ptr %324, ptr @143)
   br i1 %325, label %then_block179, label %merge_block181
 
 then_block179:                                    ; preds = %merge_block178
-  %326 = load ptr, ptr %to121, align 8
+  %326 = load ptr, ptr %to127, align 8
   %type180 = getelementptr %token.2, ptr %326, i32 0, i32 0
-  %327 = load i64, ptr @TOKEN_LPAREN.34, align 4
+  %327 = load i64, ptr @TOKEN_ARROW.12, align 4
   store i64 %327, ptr %type180, align 4
-  %328 = load ptr, ptr %to121, align 8
+  %328 = load ptr, ptr %to127, align 8
   ret ptr %328
 
 merge_block181:                                   ; preds = %merge_block178
-  %329 = load ptr, ptr %t115, align 8
-  %330 = call i1 @tokenizer_accept_string(ptr %329, ptr @140)
+  %329 = load ptr, ptr %t121, align 8
+  %330 = call i1 @tokenizer_accept_string(ptr %329, ptr @144)
   br i1 %330, label %then_block182, label %merge_block184
 
 then_block182:                                    ; preds = %merge_block181
-  %331 = load ptr, ptr %to121, align 8
+  %331 = load ptr, ptr %to127, align 8
   %type183 = getelementptr %token.2, ptr %331, i32 0, i32 0
-  %332 = load i64, ptr @TOKEN_RPAREN.35, align 4
+  %332 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   store i64 %332, ptr %type183, align 4
-  %333 = load ptr, ptr %to121, align 8
+  %333 = load ptr, ptr %to127, align 8
   ret ptr %333
 
 merge_block184:                                   ; preds = %merge_block181
-  %334 = load ptr, ptr %t115, align 8
-  %335 = call i1 @tokenizer_accept_string(ptr %334, ptr @141)
+  %334 = load ptr, ptr %t121, align 8
+  %335 = call i1 @tokenizer_accept_string(ptr %334, ptr @145)
   br i1 %335, label %then_block185, label %merge_block187
 
 then_block185:                                    ; preds = %merge_block184
-  %336 = load ptr, ptr %to121, align 8
+  %336 = load ptr, ptr %to127, align 8
   %type186 = getelementptr %token.2, ptr %336, i32 0, i32 0
-  %337 = load i64, ptr @TOKEN_LBRACE.36, align 4
+  %337 = load i64, ptr @TOKEN_COMMA.34, align 4
   store i64 %337, ptr %type186, align 4
-  %338 = load ptr, ptr %to121, align 8
+  %338 = load ptr, ptr %to127, align 8
   ret ptr %338
 
 merge_block187:                                   ; preds = %merge_block184
-  %339 = load ptr, ptr %t115, align 8
-  %340 = call i1 @tokenizer_accept_string(ptr %339, ptr @142)
+  %339 = load ptr, ptr %t121, align 8
+  %340 = call i1 @tokenizer_accept_string(ptr %339, ptr @146)
   br i1 %340, label %then_block188, label %merge_block190
 
 then_block188:                                    ; preds = %merge_block187
-  %341 = load ptr, ptr %to121, align 8
+  %341 = load ptr, ptr %to127, align 8
   %type189 = getelementptr %token.2, ptr %341, i32 0, i32 0
-  %342 = load i64, ptr @TOKEN_RBRACE.37, align 4
+  %342 = load i64, ptr @TOKEN_COLON.35, align 4
   store i64 %342, ptr %type189, align 4
-  %343 = load ptr, ptr %to121, align 8
+  %343 = load ptr, ptr %to127, align 8
   ret ptr %343
 
 merge_block190:                                   ; preds = %merge_block187
-  %344 = load ptr, ptr %t115, align 8
-  %345 = call i1 @tokenizer_accept_string(ptr %344, ptr @143)
+  %344 = load ptr, ptr %t121, align 8
+  %345 = call i1 @tokenizer_accept_string(ptr %344, ptr @147)
   br i1 %345, label %then_block191, label %merge_block193
 
 then_block191:                                    ; preds = %merge_block190
-  %346 = load ptr, ptr %to121, align 8
+  %346 = load ptr, ptr %to127, align 8
   %type192 = getelementptr %token.2, ptr %346, i32 0, i32 0
-  %347 = load i64, ptr @TOKEN_EQUALS.21, align 4
+  %347 = load i64, ptr @TOKEN_LPAREN.36, align 4
   store i64 %347, ptr %type192, align 4
-  %348 = load ptr, ptr %to121, align 8
+  %348 = load ptr, ptr %to127, align 8
   ret ptr %348
 
 merge_block193:                                   ; preds = %merge_block190
-  %349 = load ptr, ptr %t115, align 8
-  %350 = call i1 @tokenizer_accept_string(ptr %349, ptr @144)
+  %349 = load ptr, ptr %t121, align 8
+  %350 = call i1 @tokenizer_accept_string(ptr %349, ptr @148)
   br i1 %350, label %then_block194, label %merge_block196
 
 then_block194:                                    ; preds = %merge_block193
-  %351 = load ptr, ptr %to121, align 8
+  %351 = load ptr, ptr %to127, align 8
   %type195 = getelementptr %token.2, ptr %351, i32 0, i32 0
-  %352 = load i64, ptr @TOKEN_PLUS.22, align 4
+  %352 = load i64, ptr @TOKEN_RPAREN.37, align 4
   store i64 %352, ptr %type195, align 4
-  %353 = load ptr, ptr %to121, align 8
+  %353 = load ptr, ptr %to127, align 8
   ret ptr %353
 
 merge_block196:                                   ; preds = %merge_block193
-  %354 = load ptr, ptr %t115, align 8
-  %355 = call i1 @tokenizer_accept_string(ptr %354, ptr @145)
+  %354 = load ptr, ptr %t121, align 8
+  %355 = call i1 @tokenizer_accept_string(ptr %354, ptr @149)
   br i1 %355, label %then_block197, label %merge_block199
 
 then_block197:                                    ; preds = %merge_block196
-  %356 = load ptr, ptr %to121, align 8
+  %356 = load ptr, ptr %to127, align 8
   %type198 = getelementptr %token.2, ptr %356, i32 0, i32 0
-  %357 = load i64, ptr @TOKEN_MINUS.23, align 4
+  %357 = load i64, ptr @TOKEN_LBRACE.38, align 4
   store i64 %357, ptr %type198, align 4
-  %358 = load ptr, ptr %to121, align 8
+  %358 = load ptr, ptr %to127, align 8
   ret ptr %358
 
 merge_block199:                                   ; preds = %merge_block196
-  %359 = load ptr, ptr %t115, align 8
-  %360 = call i1 @tokenizer_accept_string(ptr %359, ptr @146)
+  %359 = load ptr, ptr %t121, align 8
+  %360 = call i1 @tokenizer_accept_string(ptr %359, ptr @150)
   br i1 %360, label %then_block200, label %merge_block202
 
 then_block200:                                    ; preds = %merge_block199
-  %361 = load ptr, ptr %to121, align 8
+  %361 = load ptr, ptr %to127, align 8
   %type201 = getelementptr %token.2, ptr %361, i32 0, i32 0
-  %362 = load i64, ptr @TOKEN_MUL.24, align 4
+  %362 = load i64, ptr @TOKEN_RBRACE.39, align 4
   store i64 %362, ptr %type201, align 4
-  %363 = load ptr, ptr %to121, align 8
+  %363 = load ptr, ptr %to127, align 8
   ret ptr %363
 
 merge_block202:                                   ; preds = %merge_block199
-  %364 = load ptr, ptr %t115, align 8
-  %365 = call i1 @tokenizer_accept_string(ptr %364, ptr @147)
+  %364 = load ptr, ptr %t121, align 8
+  %365 = call i1 @tokenizer_accept_string(ptr %364, ptr @151)
   br i1 %365, label %then_block203, label %merge_block205
 
 then_block203:                                    ; preds = %merge_block202
-  %366 = load ptr, ptr %to121, align 8
+  %366 = load ptr, ptr %to127, align 8
   %type204 = getelementptr %token.2, ptr %366, i32 0, i32 0
-  %367 = load i64, ptr @TOKEN_DIV.25, align 4
+  %367 = load i64, ptr @TOKEN_EQUALS.23, align 4
   store i64 %367, ptr %type204, align 4
-  %368 = load ptr, ptr %to121, align 8
+  %368 = load ptr, ptr %to127, align 8
   ret ptr %368
 
 merge_block205:                                   ; preds = %merge_block202
-  %369 = load ptr, ptr %t115, align 8
-  %370 = call i1 @tokenizer_accept_string(ptr %369, ptr @148)
+  %369 = load ptr, ptr %t121, align 8
+  %370 = call i1 @tokenizer_accept_string(ptr %369, ptr @152)
   br i1 %370, label %then_block206, label %merge_block208
 
 then_block206:                                    ; preds = %merge_block205
-  %371 = load ptr, ptr %to121, align 8
+  %371 = load ptr, ptr %to127, align 8
   %type207 = getelementptr %token.2, ptr %371, i32 0, i32 0
-  %372 = load i64, ptr @TOKEN_MOD.26, align 4
+  %372 = load i64, ptr @TOKEN_PLUS.24, align 4
   store i64 %372, ptr %type207, align 4
-  %373 = load ptr, ptr %to121, align 8
+  %373 = load ptr, ptr %to127, align 8
   ret ptr %373
 
 merge_block208:                                   ; preds = %merge_block205
-  %374 = load ptr, ptr %t115, align 8
-  %375 = call i1 @tokenizer_accept_string(ptr %374, ptr @149)
+  %374 = load ptr, ptr %t121, align 8
+  %375 = call i1 @tokenizer_accept_string(ptr %374, ptr @153)
   br i1 %375, label %then_block209, label %merge_block211
 
 then_block209:                                    ; preds = %merge_block208
-  %376 = load ptr, ptr %to121, align 8
+  %376 = load ptr, ptr %to127, align 8
   %type210 = getelementptr %token.2, ptr %376, i32 0, i32 0
-  %377 = load i64, ptr @TOKEN_BANG.27, align 4
+  %377 = load i64, ptr @TOKEN_MINUS.25, align 4
   store i64 %377, ptr %type210, align 4
-  %378 = load ptr, ptr %to121, align 8
+  %378 = load ptr, ptr %to127, align 8
   ret ptr %378
 
 merge_block211:                                   ; preds = %merge_block208
-  %379 = load ptr, ptr %t115, align 8
-  %380 = call i1 @tokenizer_accept_string(ptr %379, ptr @150)
+  %379 = load ptr, ptr %t121, align 8
+  %380 = call i1 @tokenizer_accept_string(ptr %379, ptr @154)
   br i1 %380, label %then_block212, label %merge_block214
 
 then_block212:                                    ; preds = %merge_block211
-  %381 = load ptr, ptr %to121, align 8
+  %381 = load ptr, ptr %to127, align 8
   %type213 = getelementptr %token.2, ptr %381, i32 0, i32 0
-  %382 = load i64, ptr @TOKEN_LESS.28, align 4
+  %382 = load i64, ptr @TOKEN_MUL.26, align 4
   store i64 %382, ptr %type213, align 4
-  %383 = load ptr, ptr %to121, align 8
+  %383 = load ptr, ptr %to127, align 8
   ret ptr %383
 
 merge_block214:                                   ; preds = %merge_block211
-  %384 = load ptr, ptr %t115, align 8
-  %385 = call i1 @tokenizer_accept_string(ptr %384, ptr @151)
+  %384 = load ptr, ptr %t121, align 8
+  %385 = call i1 @tokenizer_accept_string(ptr %384, ptr @155)
   br i1 %385, label %then_block215, label %merge_block217
 
 then_block215:                                    ; preds = %merge_block214
-  %386 = load ptr, ptr %to121, align 8
+  %386 = load ptr, ptr %to127, align 8
   %type216 = getelementptr %token.2, ptr %386, i32 0, i32 0
-  %387 = load i64, ptr @TOKEN_GREATER.29, align 4
+  %387 = load i64, ptr @TOKEN_DIV.27, align 4
   store i64 %387, ptr %type216, align 4
-  %388 = load ptr, ptr %to121, align 8
+  %388 = load ptr, ptr %to127, align 8
   ret ptr %388
 
 merge_block217:                                   ; preds = %merge_block214
-  %389 = load ptr, ptr %t115, align 8
-  %390 = call i1 @tokenizer_accept_string(ptr %389, ptr @152)
+  %389 = load ptr, ptr %t121, align 8
+  %390 = call i1 @tokenizer_accept_string(ptr %389, ptr @156)
   br i1 %390, label %then_block218, label %merge_block220
 
 then_block218:                                    ; preds = %merge_block217
-  %391 = load ptr, ptr %to121, align 8
+  %391 = load ptr, ptr %to127, align 8
   %type219 = getelementptr %token.2, ptr %391, i32 0, i32 0
-  %392 = load i64, ptr @TOKEN_DOT.30, align 4
+  %392 = load i64, ptr @TOKEN_MOD.28, align 4
   store i64 %392, ptr %type219, align 4
-  %393 = load ptr, ptr %to121, align 8
+  %393 = load ptr, ptr %to127, align 8
   ret ptr %393
 
 merge_block220:                                   ; preds = %merge_block217
-  %394 = load ptr, ptr %t115, align 8
-  %395 = call ptr @tokenizer_accept_int_type(ptr %394)
-  %maybe_int221 = alloca ptr, align 8
-  store ptr %395, ptr %maybe_int221, align 8
-  %396 = load ptr, ptr %maybe_int221, align 8
-  %397 = icmp ne ptr %396, null
-  br i1 %397, label %then_block222, label %merge_block225
-
-then_block222:                                    ; preds = %merge_block220
-  %398 = load ptr, ptr %to121, align 8
-  %type223 = getelementptr %token.2, ptr %398, i32 0, i32 0
-  %399 = load i64, ptr @TOKEN_NUMBER.16, align 4
-  store i64 %399, ptr %type223, align 4
-  %400 = load ptr, ptr %to121, align 8
-  %data224 = getelementptr %token.2, ptr %400, i32 0, i32 1
-  %401 = load ptr, ptr %maybe_int221, align 8
-  store ptr %401, ptr %data224, align 8
-  %402 = load ptr, ptr %to121, align 8
-  ret ptr %402
-
-merge_block225:                                   ; preds = %merge_block220
-  %403 = load ptr, ptr %t115, align 8
-  %404 = call ptr @tokenizer_accept_char_type(ptr %403)
-  %maybe_char226 = alloca ptr, align 8
-  store ptr %404, ptr %maybe_char226, align 8
-  %405 = load ptr, ptr %maybe_char226, align 8
-  %406 = icmp ne ptr %405, null
-  br i1 %406, label %then_block227, label %merge_block230
-
-then_block227:                                    ; preds = %merge_block225
-  %407 = load ptr, ptr %to121, align 8
-  %type228 = getelementptr %token.2, ptr %407, i32 0, i32 0
-  %408 = load i64, ptr @TOKEN_CHAR.19, align 4
-  store i64 %408, ptr %type228, align 4
-  %409 = load ptr, ptr %to121, align 8
-  %data229 = getelementptr %token.2, ptr %409, i32 0, i32 1
-  %410 = load ptr, ptr %maybe_char226, align 8
-  store ptr %410, ptr %data229, align 8
-  %411 = load ptr, ptr %to121, align 8
-  ret ptr %411
-
-merge_block230:                                   ; preds = %merge_block225
-  %412 = load ptr, ptr %t115, align 8
-  %413 = call ptr @tokenizer_accept_string_type(ptr %412)
-  %maybe_string231 = alloca ptr, align 8
-  store ptr %413, ptr %maybe_string231, align 8
-  %414 = load ptr, ptr %maybe_string231, align 8
-  %415 = icmp ne ptr %414, null
-  br i1 %415, label %then_block232, label %merge_block235
-
-then_block232:                                    ; preds = %merge_block230
-  %416 = load ptr, ptr %to121, align 8
-  %type233 = getelementptr %token.2, ptr %416, i32 0, i32 0
-  %417 = load i64, ptr @TOKEN_STRING.20, align 4
-  store i64 %417, ptr %type233, align 4
-  %418 = load ptr, ptr %to121, align 8
-  %data234 = getelementptr %token.2, ptr %418, i32 0, i32 1
-  %419 = load ptr, ptr %maybe_string231, align 8
-  store ptr %419, ptr %data234, align 8
-  %420 = load ptr, ptr %to121, align 8
-  ret ptr %420
-
-merge_block235:                                   ; preds = %merge_block230
-  %421 = load ptr, ptr %t115, align 8
-  %422 = call ptr @tokenizer_consume_until_condition(ptr %421, ptr @unnamed_func.41)
-  %string236 = alloca ptr, align 8
-  store ptr %422, ptr %string236, align 8
-  %423 = load ptr, ptr %string236, align 8
-  %424 = call i64 @strlen(ptr %423)
-  %425 = icmp eq i64 %424, 0
-  br i1 %425, label %then_block237, label %merge_block238
-
-then_block237:                                    ; preds = %merge_block235
-  call void (ptr, ...) @printf(ptr @153)
+  %394 = load ptr, ptr %t121, align 8
+  %395 = call i1 @tokenizer_accept_string(ptr %394, ptr @157)
+  br i1 %395, label %then_block221, label %merge_block223
+
+then_block221:                                    ; preds = %merge_block220
+  %396 = load ptr, ptr %to127, align 8
+  %type222 = getelementptr %token.2, ptr %396, i32 0, i32 0
+  %397 = load i64, ptr @TOKEN_BANG.29, align 4
+  store i64 %397, ptr %type222, align 4
+  %398 = load ptr, ptr %to127, align 8
+  ret ptr %398
+
+merge_block223:                                   ; preds = %merge_block220
+  %399 = load ptr, ptr %t121, align 8
+  %400 = call i1 @tokenizer_accept_string(ptr %399, ptr @158)
+  br i1 %400, label %then_block224, label %merge_block226
+
+then_block224:                                    ; preds = %merge_block223
+  %401 = load ptr, ptr %to127, align 8
+  %type225 = getelementptr %token.2, ptr %401, i32 0, i32 0
+  %402 = load i64, ptr @TOKEN_LESS.30, align 4
+  store i64 %402, ptr %type225, align 4
+  %403 = load ptr, ptr %to127, align 8
+  ret ptr %403
+
+merge_block226:                                   ; preds = %merge_block223
+  %404 = load ptr, ptr %t121, align 8
+  %405 = call i1 @tokenizer_accept_string(ptr %404, ptr @159)
+  br i1 %405, label %then_block227, label %merge_block229
+
+then_block227:                                    ; preds = %merge_block226
+  %406 = load ptr, ptr %to127, align 8
+  %type228 = getelementptr %token.2, ptr %406, i32 0, i32 0
+  %407 = load i64, ptr @TOKEN_GREATER.31, align 4
+  store i64 %407, ptr %type228, align 4
+  %408 = load ptr, ptr %to127, align 8
+  ret ptr %408
+
+merge_block229:                                   ; preds = %merge_block226
+  %409 = load ptr, ptr %t121, align 8
+  %410 = call i1 @tokenizer_accept_string(ptr %409, ptr @160)
+  br i1 %410, label %then_block230, label %merge_block232
+
+then_block230:                                    ; preds = %merge_block229
+  %411 = load ptr, ptr %to127, align 8
+  %type231 = getelementptr %token.2, ptr %411, i32 0, i32 0
+  %412 = load i64, ptr @TOKEN_DOT.32, align 4
+  store i64 %412, ptr %type231, align 4
+  %413 = load ptr, ptr %to127, align 8
+  ret ptr %413
+
+merge_block232:                                   ; preds = %merge_block229
+  %414 = load ptr, ptr %t121, align 8
+  %415 = call ptr @tokenizer_accept_int_type(ptr %414)
+  %maybe_int233 = alloca ptr, align 8
+  store ptr %415, ptr %maybe_int233, align 8
+  %416 = load ptr, ptr %maybe_int233, align 8
+  %417 = icmp ne ptr %416, null
+  br i1 %417, label %then_block234, label %merge_block237
+
+then_block234:                                    ; preds = %merge_block232
+  %418 = load ptr, ptr %to127, align 8
+  %type235 = getelementptr %token.2, ptr %418, i32 0, i32 0
+  %419 = load i64, ptr @TOKEN_NUMBER.18, align 4
+  store i64 %419, ptr %type235, align 4
+  %420 = load ptr, ptr %to127, align 8
+  %data236 = getelementptr %token.2, ptr %420, i32 0, i32 1
+  %421 = load ptr, ptr %maybe_int233, align 8
+  store ptr %421, ptr %data236, align 8
+  %422 = load ptr, ptr %to127, align 8
+  ret ptr %422
+
+merge_block237:                                   ; preds = %merge_block232
+  %423 = load ptr, ptr %t121, align 8
+  %424 = call ptr @tokenizer_accept_char_type(ptr %423)
+  %maybe_char238 = alloca ptr, align 8
+  store ptr %424, ptr %maybe_char238, align 8
+  %425 = load ptr, ptr %maybe_char238, align 8
+  %426 = icmp ne ptr %425, null
+  br i1 %426, label %then_block239, label %merge_block242
+
+then_block239:                                    ; preds = %merge_block237
+  %427 = load ptr, ptr %to127, align 8
+  %type240 = getelementptr %token.2, ptr %427, i32 0, i32 0
+  %428 = load i64, ptr @TOKEN_CHAR.21, align 4
+  store i64 %428, ptr %type240, align 4
+  %429 = load ptr, ptr %to127, align 8
+  %data241 = getelementptr %token.2, ptr %429, i32 0, i32 1
+  %430 = load ptr, ptr %maybe_char238, align 8
+  store ptr %430, ptr %data241, align 8
+  %431 = load ptr, ptr %to127, align 8
+  ret ptr %431
+
+merge_block242:                                   ; preds = %merge_block237
+  %432 = load ptr, ptr %t121, align 8
+  %433 = call ptr @tokenizer_accept_string_type(ptr %432)
+  %maybe_string243 = alloca ptr, align 8
+  store ptr %433, ptr %maybe_string243, align 8
+  %434 = load ptr, ptr %maybe_string243, align 8
+  %435 = icmp ne ptr %434, null
+  br i1 %435, label %then_block244, label %merge_block247
+
+then_block244:                                    ; preds = %merge_block242
+  %436 = load ptr, ptr %to127, align 8
+  %type245 = getelementptr %token.2, ptr %436, i32 0, i32 0
+  %437 = load i64, ptr @TOKEN_STRING.22, align 4
+  store i64 %437, ptr %type245, align 4
+  %438 = load ptr, ptr %to127, align 8
+  %data246 = getelementptr %token.2, ptr %438, i32 0, i32 1
+  %439 = load ptr, ptr %maybe_string243, align 8
+  store ptr %439, ptr %data246, align 8
+  %440 = load ptr, ptr %to127, align 8
+  ret ptr %440
+
+merge_block247:                                   ; preds = %merge_block242
+  %441 = load ptr, ptr %t121, align 8
+  %442 = call ptr @tokenizer_consume_until_condition(ptr %441, ptr @unnamed_func.43)
+  %string248 = alloca ptr, align 8
+  store ptr %442, ptr %string248, align 8
+  %443 = load ptr, ptr %string248, align 8
+  %444 = call i64 @strlen(ptr %443)
+  %445 = icmp eq i64 %444, 0
+  br i1 %445, label %then_block249, label %merge_block250
+
+then_block249:                                    ; preds = %merge_block247
+  call void (ptr, ...) @printf(ptr @161)
   ret ptr null
 
-merge_block238:                                   ; preds = %merge_block235
-  %426 = load ptr, ptr %to121, align 8
-  %type239 = getelementptr %token.2, ptr %426, i32 0, i32 0
-  %427 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
-  store i64 %427, ptr %type239, align 4
-  %428 = load ptr, ptr %to121, align 8
-  %data240 = getelementptr %token.2, ptr %428, i32 0, i32 1
-  %429 = load ptr, ptr %string236, align 8
-  store ptr %429, ptr %data240, align 8
-  %430 = load ptr, ptr %to121, align 8
-  ret ptr %430
+merge_block250:                                   ; preds = %merge_block247
+  %446 = load ptr, ptr %to127, align 8
+  %type251 = getelementptr %token.2, ptr %446, i32 0, i32 0
+  %447 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
+  store i64 %447, ptr %type251, align 4
+  %448 = load ptr, ptr %to127, align 8
+  %data252 = getelementptr %token.2, ptr %448, i32 0, i32 1
+  %449 = load ptr, ptr %string248, align 8
+  store ptr %449, ptr %data252, align 8
+  %450 = load ptr, ptr %to127, align 8
+  ret ptr %450
 }
 
 define i1 @unnamed_func.3(i8 %0) {
@@ -5109,11 +5217,11 @@ entrypoint:
   %11 = load ptr, ptr %t, align 8
   %buf_len1 = getelementptr %tokenizer, ptr %11, i32 0, i32 1
   %12 = load i64, ptr %buf_len1, align 4
-  call void (ptr, ...) @printf(ptr @76, i64 %12)
+  call void (ptr, ...) @printf(ptr @80, i64 %12)
   %13 = load ptr, ptr %t, align 8
   %buf2 = getelementptr %tokenizer, ptr %13, i32 0, i32 0
   %14 = load ptr, ptr %buf2, align 8
-  call void (ptr, ...) @printf(ptr @77, ptr %14)
+  call void (ptr, ...) @printf(ptr @81, ptr %14)
   %15 = load ptr, ptr %t, align 8
   ret ptr %15
 
@@ -5146,11 +5254,11 @@ entrypoint3:                                      ; No predecessors!
   %25 = load ptr, ptr %t6, align 8
   %buf_len13 = getelementptr %tokenizer.3, ptr %25, i32 0, i32 1
   %26 = load i64, ptr %buf_len13, align 4
-  call void (ptr, ...) @printf(ptr @154, i64 %26)
+  call void (ptr, ...) @printf(ptr @162, i64 %26)
   %27 = load ptr, ptr %t6, align 8
   %buf14 = getelementptr %tokenizer.3, ptr %27, i32 0, i32 0
   %28 = load ptr, ptr %buf14, align 8
-  call void (ptr, ...) @printf(ptr @155, ptr %28)
+  call void (ptr, ...) @printf(ptr @163, ptr %28)
   %29 = load ptr, ptr %t6, align 8
   ret ptr %29
 }
@@ -5183,7 +5291,7 @@ inner_block:                                      ; preds = %while_block
 
 outer_block:                                      ; preds = %then_block, %while_block
   %8 = load i64, ptr %tokens_len, align 4
-  call void (ptr, ...) @printf(ptr @79, i64 %8)
+  call void (ptr, ...) @printf(ptr @83, i64 %8)
   %9 = load ptr, ptr %tokens, align 8
   %10 = load i64, ptr %tokens_len, align 4
   %11 = call i64 @print_tokens(ptr %9, i64 %10)
@@ -5204,7 +5312,7 @@ merge_block:                                      ; preds = %inner_block
   %15 = load ptr, ptr %tk, align 8
   %type = getelementptr %token, ptr %15, i32 0, i32 0
   %16 = load i64, ptr %type, align 4
-  call void (ptr, ...) @printf(ptr @78, i64 %16)
+  call void (ptr, ...) @printf(ptr @82, i64 %16)
   %17 = load ptr, ptr %tokens, align 8
   %18 = load i64, ptr %tokens_len, align 4
   %19 = getelementptr %token, ptr %17, i64 %18
@@ -5243,7 +5351,7 @@ inner_block7:                                     ; preds = %while_block6
 
 outer_block8:                                     ; preds = %then_block10, %while_block6
   %31 = load i64, ptr %tokens_len5, align 4
-  call void (ptr, ...) @printf(ptr @157, i64 %31)
+  call void (ptr, ...) @printf(ptr @165, i64 %31)
   %32 = load ptr, ptr %tokens4, align 8
   %33 = load i64, ptr %tokens_len5, align 4
   %34 = call i64 @print_tokens(ptr %32, i64 %33)
@@ -5264,7 +5372,7 @@ merge_block11:                                    ; preds = %inner_block7
   %38 = load ptr, ptr %tk9, align 8
   %type12 = getelementptr %token.2, ptr %38, i32 0, i32 0
   %39 = load i64, ptr %type12, align 4
-  call void (ptr, ...) @printf(ptr @156, i64 %39)
+  call void (ptr, ...) @printf(ptr @164, i64 %39)
   %40 = load ptr, ptr %tokens4, align 8
   %41 = load i64, ptr %tokens_len5, align 4
   %42 = getelementptr %token.2, ptr %40, i64 %41
@@ -5277,7 +5385,7 @@ merge_block11:                                    ; preds = %inner_block7
   br label %while_block6
 }
 
-define i1 @unnamed_func.38(i8 %0) {
+define i1 @unnamed_func.40(i8 %0) {
 entrypoint:
   %c = alloca i8, align 1
   store i8 %0, ptr %c, align 1
@@ -5287,7 +5395,7 @@ entrypoint:
   ret i1 %3
 }
 
-define i1 @unnamed_func.39(i8 %0) {
+define i1 @unnamed_func.41(i8 %0) {
 entrypoint:
   %c = alloca i8, align 1
   store i8 %0, ptr %c, align 1
@@ -5296,7 +5404,7 @@ entrypoint:
   ret i1 %2
 }
 
-define i1 @unnamed_func.40(i8 %0) {
+define i1 @unnamed_func.42(i8 %0) {
 entrypoint:
   %c = alloca i8, align 1
   store i8 %0, ptr %c, align 1
@@ -5305,7 +5413,7 @@ entrypoint:
   ret i1 %2
 }
 
-define i1 @unnamed_func.41(i8 %0) {
+define i1 @unnamed_func.43(i8 %0) {
 entrypoint:
   %c = alloca i8, align 1
   store i8 %0, ptr %c, align 1
@@ -5372,7 +5480,7 @@ entrypoint:
 
 then_block:                                       ; preds = %entrypoint
   %5 = load ptr, ptr %p, align 8
-  %6 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %6 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp eq ptr %7, null
   br i1 %8, label %then_block1, label %merge_block
@@ -5395,7 +5503,7 @@ merge_block2:                                     ; preds = %entrypoint
 
 then_block4:                                      ; preds = %merge_block2
   %14 = load ptr, ptr %p, align 8
-  %15 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %15 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %16 = call ptr @parser_accept_token(ptr %14, i64 %15)
   %17 = icmp eq ptr %16, null
   br i1 %17, label %then_block5, label %merge_block6
@@ -5418,7 +5526,7 @@ merge_block7:                                     ; preds = %merge_block2
 
 then_block9:                                      ; preds = %merge_block7
   %23 = load ptr, ptr %p, align 8
-  %24 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %24 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %25 = call ptr @parser_accept_token(ptr %23, i64 %24)
   %26 = icmp eq ptr %25, null
   br i1 %26, label %then_block10, label %merge_block11
@@ -5441,7 +5549,7 @@ merge_block12:                                    ; preds = %merge_block7
 
 then_block13:                                     ; preds = %merge_block12
   %32 = load ptr, ptr %p, align 8
-  %33 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %33 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %34 = call ptr @parser_accept_token(ptr %32, i64 %33)
   %35 = icmp eq ptr %34, null
   br i1 %35, label %then_block14, label %merge_block15
@@ -5464,7 +5572,7 @@ merge_block16:                                    ; preds = %merge_block12
 
 then_block17:                                     ; preds = %merge_block16
   %41 = load ptr, ptr %p, align 8
-  %42 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %42 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %43 = call ptr @parser_accept_token(ptr %41, i64 %42)
   %44 = icmp eq ptr %43, null
   br i1 %44, label %then_block18, label %merge_block19
@@ -5487,7 +5595,7 @@ merge_block20:                                    ; preds = %merge_block16
 
 then_block22:                                     ; preds = %merge_block20
   %50 = load ptr, ptr %p, align 8
-  %51 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %51 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %52 = call ptr @parser_accept_token(ptr %50, i64 %51)
   %53 = icmp eq ptr %52, null
   br i1 %53, label %then_block23, label %merge_block24
@@ -5510,7 +5618,7 @@ merge_block25:                                    ; preds = %merge_block20
 
 then_block27:                                     ; preds = %merge_block25
   %59 = load ptr, ptr %p, align 8
-  %60 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %60 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %61 = call ptr @parser_accept_token(ptr %59, i64 %60)
   %62 = icmp eq ptr %61, null
   br i1 %62, label %then_block28, label %merge_block29
@@ -5533,7 +5641,7 @@ merge_block30:                                    ; preds = %merge_block25
 
 then_block32:                                     ; preds = %merge_block30
   %68 = load ptr, ptr %p, align 8
-  %69 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %69 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %70 = call ptr @parser_accept_token(ptr %68, i64 %69)
   %71 = icmp eq ptr %70, null
   br i1 %71, label %then_block33, label %merge_block34
@@ -5556,7 +5664,7 @@ merge_block35:                                    ; preds = %merge_block30
 
 then_block37:                                     ; preds = %merge_block35
   %77 = load ptr, ptr %p, align 8
-  %78 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %78 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %79 = call ptr @parser_accept_token(ptr %77, i64 %78)
   %80 = icmp eq ptr %79, null
   br i1 %80, label %then_block38, label %merge_block39
@@ -5570,7 +5678,7 @@ merge_block39:                                    ; preds = %then_block37
 
 merge_block40:                                    ; preds = %merge_block35
   %82 = load ptr, ptr %p, align 8
-  %83 = call ptr @parser_accept_parse(ptr %82, ptr @unnamed_func.47)
+  %83 = call ptr @parser_accept_parse(ptr %82, ptr @unnamed_func.49)
   %retu41 = alloca ptr, align 8
   store ptr %83, ptr %retu41, align 8
   %84 = load ptr, ptr %retu41, align 8
@@ -5579,7 +5687,7 @@ merge_block40:                                    ; preds = %merge_block35
 
 then_block42:                                     ; preds = %merge_block40
   %86 = load ptr, ptr %p, align 8
-  %87 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %87 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %88 = call ptr @parser_accept_token(ptr %86, i64 %87)
   %89 = icmp eq ptr %88, null
   br i1 %89, label %then_block43, label %merge_block44
@@ -5593,7 +5701,7 @@ merge_block44:                                    ; preds = %then_block42
 
 merge_block45:                                    ; preds = %merge_block40
   %91 = load ptr, ptr %p, align 8
-  %92 = call ptr @parser_accept_parse(ptr %91, ptr @unnamed_func.48)
+  %92 = call ptr @parser_accept_parse(ptr %91, ptr @unnamed_func.50)
   %retu46 = alloca ptr, align 8
   store ptr %92, ptr %retu46, align 8
   %93 = load ptr, ptr %retu46, align 8
@@ -5602,7 +5710,7 @@ merge_block45:                                    ; preds = %merge_block40
 
 then_block47:                                     ; preds = %merge_block45
   %95 = load ptr, ptr %p, align 8
-  %96 = load i64, ptr @TOKEN_SEMICOLON.31, align 4
+  %96 = load i64, ptr @TOKEN_SEMICOLON.33, align 4
   %97 = call ptr @parser_accept_token(ptr %95, i64 %96)
   %98 = icmp eq ptr %97, null
   br i1 %98, label %then_block48, label %merge_block49
@@ -5615,7 +5723,7 @@ merge_block49:                                    ; preds = %then_block47
   ret ptr %99
 
 merge_block50:                                    ; preds = %merge_block45
-  call void (ptr, ...) @printf(ptr @165)
+  call void (ptr, ...) @printf(ptr @173)
   ret ptr null
 }
 
@@ -5657,7 +5765,7 @@ entrypoint:
   %p = alloca ptr, align 8
   store ptr %0, ptr %p, align 8
   %1 = load ptr, ptr %p, align 8
-  %2 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %2 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %ident = alloca ptr, align 8
   store ptr %3, ptr %ident, align 8
@@ -5682,7 +5790,7 @@ merge_block:                                      ; preds = %then_block
 
 merge_block2:                                     ; preds = %entrypoint, %merge_block
   %10 = load ptr, ptr %p, align 8
-  %11 = load i64, ptr @TOKEN_LPAREN.34, align 4
+  %11 = load i64, ptr @TOKEN_LPAREN.36, align 4
   %12 = call ptr @parser_accept_token(ptr %10, i64 %11)
   %13 = icmp eq ptr %12, null
   br i1 %13, label %then_block3, label %merge_block4
@@ -5704,7 +5812,7 @@ then_block5:                                      ; preds = %merge_block4
 
 merge_block6:                                     ; preds = %merge_block4
   %18 = load ptr, ptr %p, align 8
-  %19 = load i64, ptr @TOKEN_RPAREN.35, align 4
+  %19 = load i64, ptr @TOKEN_RPAREN.37, align 4
   %20 = call ptr @parser_accept_token(ptr %18, i64 %19)
   %21 = icmp eq ptr %20, null
   br i1 %21, label %then_block7, label %merge_block8
@@ -5817,12 +5925,12 @@ while_block:                                      ; preds = %merge_block6, %merg
 
 inner_block:                                      ; preds = %while_block
   %5 = load ptr, ptr %p, align 8
-  %6 = load i64, ptr @TOKEN_PLUS.22, align 4
+  %6 = load i64, ptr @TOKEN_PLUS.24, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %plus = alloca ptr, align 8
   store ptr %7, ptr %plus, align 8
   %8 = load ptr, ptr %p, align 8
-  %9 = load i64, ptr @TOKEN_MINUS.23, align 4
+  %9 = load i64, ptr @TOKEN_MINUS.25, align 4
   %10 = call ptr @parser_accept_token(ptr %8, i64 %9)
   %minus = alloca ptr, align 8
   store ptr %10, ptr %minus, align 8
@@ -6162,7 +6270,7 @@ merge_block:                                      ; preds = %entrypoint
   %10 = load ptr, ptr %to, align 8
   %type = getelementptr %token.2, ptr %10, i32 0, i32 0
   %11 = load i64, ptr %type, align 4
-  %12 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %12 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %13 = icmp eq i64 %11, %12
   br i1 %13, label %then_block1, label %merge_block4
 
@@ -6198,7 +6306,7 @@ merge_block4:                                     ; preds = %merge_block
   %26 = load ptr, ptr %to, align 8
   %type5 = getelementptr %token.2, ptr %26, i32 0, i32 0
   %27 = load i64, ptr %type5, align 4
-  %28 = load i64, ptr @TOKEN_MUL.24, align 4
+  %28 = load i64, ptr @TOKEN_MUL.26, align 4
   %29 = icmp eq i64 %27, %28
   br i1 %29, label %then_block6, label %merge_block13
 
@@ -6235,7 +6343,7 @@ entrypoint:
   %p = alloca ptr, align 8
   store ptr %0, ptr %p, align 8
   %1 = load ptr, ptr %p, align 8
-  %2 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %2 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %ident = alloca ptr, align 8
   store ptr %3, ptr %ident, align 8
@@ -6250,7 +6358,7 @@ merge_block:                                      ; preds = %entrypoint
   %6 = load ptr, ptr %ident, align 8
   %data = getelementptr %token.2, ptr %6, i32 0, i32 1
   %7 = load ptr, ptr %data, align 8
-  %8 = call i1 @strcmp(ptr %7, ptr @158)
+  %8 = call i1 @strcmp(ptr %7, ptr @166)
   %9 = icmp eq i1 %8, false
   br i1 %9, label %then_block1, label %merge_block2
 
@@ -6259,7 +6367,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %10 = load ptr, ptr %p, align 8
-  %11 = load i64, ptr @TOKEN_LPAREN.34, align 4
+  %11 = load i64, ptr @TOKEN_LPAREN.36, align 4
   %12 = call ptr @parser_accept_token(ptr %10, i64 %11)
   %13 = icmp eq ptr %12, null
   br i1 %13, label %then_block3, label %merge_block4
@@ -6281,7 +6389,7 @@ then_block5:                                      ; preds = %merge_block4
 
 merge_block6:                                     ; preds = %merge_block4
   %18 = load ptr, ptr %p, align 8
-  %19 = load i64, ptr @TOKEN_COMMA.32, align 4
+  %19 = load i64, ptr @TOKEN_COMMA.34, align 4
   %20 = call ptr @parser_accept_token(ptr %18, i64 %19)
   %21 = icmp eq ptr %20, null
   br i1 %21, label %then_block7, label %merge_block8
@@ -6303,7 +6411,7 @@ then_block9:                                      ; preds = %merge_block8
 
 merge_block10:                                    ; preds = %merge_block8
   %26 = load ptr, ptr %p, align 8
-  %27 = load i64, ptr @TOKEN_RPAREN.35, align 4
+  %27 = load i64, ptr @TOKEN_RPAREN.37, align 4
   %28 = call ptr @parser_accept_token(ptr %26, i64 %27)
   %29 = icmp eq ptr %28, null
   br i1 %29, label %then_block11, label %merge_block12
@@ -6344,7 +6452,7 @@ entrypoint:
   %p = alloca ptr, align 8
   store ptr %0, ptr %p, align 8
   %1 = load ptr, ptr %p, align 8
-  %2 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %2 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %ident = alloca ptr, align 8
   store ptr %3, ptr %ident, align 8
@@ -6359,7 +6467,7 @@ merge_block:                                      ; preds = %entrypoint
   %6 = load ptr, ptr %ident, align 8
   %data = getelementptr %token.2, ptr %6, i32 0, i32 1
   %7 = load ptr, ptr %data, align 8
-  %8 = call i1 @strcmp(ptr %7, ptr @159)
+  %8 = call i1 @strcmp(ptr %7, ptr @167)
   %9 = icmp eq i1 %8, false
   br i1 %9, label %then_block1, label %merge_block2
 
@@ -6368,7 +6476,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %10 = load ptr, ptr %p, align 8
-  %11 = load i64, ptr @TOKEN_LPAREN.34, align 4
+  %11 = load i64, ptr @TOKEN_LPAREN.36, align 4
   %12 = call ptr @parser_accept_token(ptr %10, i64 %11)
   %13 = icmp eq ptr %12, null
   br i1 %13, label %then_block3, label %merge_block4
@@ -6390,7 +6498,7 @@ then_block5:                                      ; preds = %merge_block4
 
 merge_block6:                                     ; preds = %merge_block4
   %18 = load ptr, ptr %p, align 8
-  %19 = load i64, ptr @TOKEN_RPAREN.35, align 4
+  %19 = load i64, ptr @TOKEN_RPAREN.37, align 4
   %20 = call ptr @parser_accept_token(ptr %18, i64 %19)
   %21 = icmp eq ptr %20, null
   br i1 %21, label %then_block7, label %merge_block8
@@ -6427,7 +6535,7 @@ entrypoint:
   %p = alloca ptr, align 8
   store ptr %0, ptr %p, align 8
   %1 = load ptr, ptr %p, align 8
-  %2 = load i64, ptr @TOKEN_LPAREN.34, align 4
+  %2 = load i64, ptr @TOKEN_LPAREN.36, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %4 = icmp eq ptr %3, null
   br i1 %4, label %then_block, label %merge_block
@@ -6458,14 +6566,14 @@ inner_block:                                      ; preds = %while_block
 
 outer_block:                                      ; preds = %then_block3, %while_block
   %10 = load ptr, ptr %p, align 8
-  %11 = load i64, ptr @TOKEN_RPAREN.35, align 4
+  %11 = load i64, ptr @TOKEN_RPAREN.37, align 4
   %12 = call ptr @parser_accept_token(ptr %10, i64 %11)
   %13 = icmp eq ptr %12, null
   br i1 %13, label %then_block5, label %merge_block6
 
 then_block1:                                      ; preds = %inner_block
   %14 = load ptr, ptr %p, align 8
-  %15 = load i64, ptr @TOKEN_COMMA.32, align 4
+  %15 = load i64, ptr @TOKEN_COMMA.34, align 4
   %16 = call ptr @parser_accept_token(ptr %14, i64 %15)
   br label %merge_block2
 
@@ -6577,7 +6685,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %9 = load ptr, ptr %p, align 8
-  %10 = load i64, ptr @TOKEN_LBRACE.36, align 4
+  %10 = load i64, ptr @TOKEN_LBRACE.38, align 4
   %11 = call ptr @parser_accept_token(ptr %9, i64 %10)
   %12 = icmp eq ptr %11, null
   br i1 %12, label %then_block3, label %merge_block4
@@ -6610,7 +6718,7 @@ inner_block:                                      ; preds = %while_block
 
 outer_block:                                      ; preds = %then_block5, %while_block
   %20 = load ptr, ptr %p, align 8
-  %21 = load i64, ptr @TOKEN_RBRACE.37, align 4
+  %21 = load i64, ptr @TOKEN_RBRACE.39, align 4
   %22 = call ptr @parser_accept_token(ptr %20, i64 %21)
   %23 = icmp eq ptr %22, null
   br i1 %23, label %then_block7, label %merge_block8
@@ -6691,7 +6799,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %9 = load ptr, ptr %p, align 8
-  %10 = load i64, ptr @TOKEN_LBRACE.36, align 4
+  %10 = load i64, ptr @TOKEN_LBRACE.38, align 4
   %11 = call ptr @parser_accept_token(ptr %9, i64 %10)
   %12 = icmp eq ptr %11, null
   br i1 %12, label %then_block3, label %merge_block4
@@ -6724,7 +6832,7 @@ inner_block:                                      ; preds = %while_block
 
 outer_block:                                      ; preds = %then_block5, %while_block
   %20 = load ptr, ptr %p, align 8
-  %21 = load i64, ptr @TOKEN_RBRACE.37, align 4
+  %21 = load i64, ptr @TOKEN_RBRACE.39, align 4
   %22 = call ptr @parser_accept_token(ptr %20, i64 %21)
   %23 = icmp eq ptr %22, null
   br i1 %23, label %then_block7, label %merge_block8
@@ -6793,7 +6901,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %5 = load ptr, ptr %p, align 8
-  %6 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %6 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %ident = alloca ptr, align 8
   store ptr %7, ptr %ident, align 8
@@ -6806,7 +6914,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %10 = load ptr, ptr %p, align 8
-  %11 = load i64, ptr @TOKEN_EQUALS.21, align 4
+  %11 = load i64, ptr @TOKEN_EQUALS.23, align 4
   %12 = call ptr @parser_accept_token(ptr %10, i64 %11)
   %13 = icmp eq ptr %12, null
   br i1 %13, label %then_block3, label %merge_block4
@@ -6926,13 +7034,13 @@ outer_block:                                      ; preds = %then_block1, %while
 
 then_block:                                       ; preds = %inner_block
   %14 = load ptr, ptr %p, align 8
-  %15 = load i64, ptr @TOKEN_COMMA.32, align 4
+  %15 = load i64, ptr @TOKEN_COMMA.34, align 4
   %16 = call ptr @parser_accept_token(ptr %14, i64 %15)
   br label %merge_block
 
 merge_block:                                      ; preds = %inner_block, %then_block
   %17 = load ptr, ptr %p, align 8
-  %18 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %18 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %19 = call ptr @parser_accept_token(ptr %17, i64 %18)
   %ident = alloca ptr, align 8
   store ptr %19, ptr %ident, align 8
@@ -6945,7 +7053,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %22 = load ptr, ptr %p, align 8
-  %23 = load i64, ptr @TOKEN_COLON.33, align 4
+  %23 = load i64, ptr @TOKEN_COLON.35, align 4
   %24 = call ptr @parser_accept_token(ptr %22, i64 %23)
   %25 = icmp eq ptr %24, null
   br i1 %25, label %then_block3, label %merge_block4
@@ -7036,7 +7144,7 @@ merge_block2:                                     ; preds = %merge_block
   store ptr %11, ptr %d, align 8
   %12 = load ptr, ptr %d, align 8
   %name = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %12, i32 0, i32 0
-  store ptr @160, ptr %name, align 8
+  store ptr @168, ptr %name, align 8
   %13 = load ptr, ptr %d, align 8
   %underlying_type = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %13, i32 0, i32 1
   %14 = load ptr, ptr %typ, align 8
@@ -7069,7 +7177,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %5 = load ptr, ptr %p, align 8
-  %6 = load i64, ptr @TOKEN_LBRACE.36, align 4
+  %6 = load i64, ptr @TOKEN_LBRACE.38, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp eq ptr %7, null
   br i1 %8, label %then_block1, label %merge_block2
@@ -7093,7 +7201,7 @@ while_block:                                      ; preds = %merge_block4, %merg
 
 inner_block:                                      ; preds = %while_block
   %12 = load ptr, ptr %p, align 8
-  %13 = call ptr @parser_accept_parse(ptr %12, ptr @unnamed_func.42)
+  %13 = call ptr @parser_accept_parse(ptr %12, ptr @unnamed_func.44)
   %field = alloca ptr, align 8
   store ptr %13, ptr %field, align 8
   %14 = load ptr, ptr %field, align 8
@@ -7102,7 +7210,7 @@ inner_block:                                      ; preds = %while_block
 
 outer_block:                                      ; preds = %then_block3, %while_block
   %16 = load ptr, ptr %p, align 8
-  %17 = load i64, ptr @TOKEN_RBRACE.37, align 4
+  %17 = load i64, ptr @TOKEN_RBRACE.39, align 4
   %18 = call ptr @parser_accept_token(ptr %16, i64 %17)
   %19 = icmp eq ptr %18, null
   br i1 %19, label %then_block5, label %merge_block6
@@ -7112,7 +7220,7 @@ then_block3:                                      ; preds = %inner_block
 
 merge_block4:                                     ; preds = %inner_block
   %20 = load ptr, ptr %p, align 8
-  %21 = load i64, ptr @TOKEN_COMMA.32, align 4
+  %21 = load i64, ptr @TOKEN_COMMA.34, align 4
   %22 = call ptr @parser_accept_token(ptr %20, i64 %21)
   %23 = load ptr, ptr %fields, align 8
   %24 = load i64, ptr %i, align 4
@@ -7155,12 +7263,12 @@ merge_block6:                                     ; preds = %outer_block
   ret ptr %40
 }
 
-define ptr @unnamed_func.42(ptr %0) {
+define ptr @unnamed_func.44(ptr %0) {
 entrypoint:
   %ip = alloca ptr, align 8
   store ptr %0, ptr %ip, align 8
   %1 = load ptr, ptr %ip, align 8
-  %2 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %2 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %ident = alloca ptr, align 8
   store ptr %3, ptr %ident, align 8
@@ -7173,7 +7281,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %6 = load ptr, ptr %ip, align 8
-  %7 = load i64, ptr @TOKEN_COLON.33, align 4
+  %7 = load i64, ptr @TOKEN_COLON.35, align 4
   %8 = call ptr @parser_accept_token(ptr %6, i64 %7)
   %9 = icmp eq ptr %8, null
   br i1 %9, label %then_block1, label %merge_block2
@@ -7197,7 +7305,7 @@ merge_block4:                                     ; preds = %merge_block2
   %14 = load ptr, ptr %typ_annotation, align 8
   %type = getelementptr %Node, ptr %14, i32 0, i32 0
   %15 = load i64, ptr %type, align 4
-  call void (ptr, ...) @printf(ptr @161, i64 %15)
+  call void (ptr, ...) @printf(ptr @169, i64 %15)
   %16 = load ptr, ptr %ip, align 8
   %arena = getelementptr %parser, ptr %16, i32 0, i32 3
   %17 = load ptr, ptr %arena, align 8
@@ -7232,7 +7340,7 @@ entrypoint:
   %p = alloca ptr, align 8
   store ptr %0, ptr %p, align 8
   %1 = load ptr, ptr %p, align 8
-  %2 = load i64, ptr @TOKEN_LPAREN.34, align 4
+  %2 = load i64, ptr @TOKEN_LPAREN.36, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %4 = icmp eq ptr %3, null
   br i1 %4, label %then_block, label %merge_block
@@ -7254,7 +7362,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %9 = load ptr, ptr %p, align 8
-  %10 = load i64, ptr @TOKEN_RPAREN.35, align 4
+  %10 = load i64, ptr @TOKEN_RPAREN.37, align 4
   %11 = call ptr @parser_accept_token(ptr %9, i64 %10)
   %12 = icmp eq ptr %11, null
   br i1 %12, label %then_block3, label %merge_block4
@@ -7286,7 +7394,7 @@ then_block7:                                      ; preds = %merge_block6
 
 merge_block8:                                     ; preds = %merge_block6
   %21 = load ptr, ptr %p, align 8
-  %22 = load i64, ptr @TOKEN_LBRACE.36, align 4
+  %22 = load i64, ptr @TOKEN_LBRACE.38, align 4
   %23 = call ptr @parser_accept_token(ptr %21, i64 %22)
   %24 = icmp eq ptr %23, null
   br i1 %24, label %then_block9, label %merge_block10
@@ -7319,7 +7427,7 @@ inner_block:                                      ; preds = %while_block
 
 outer_block:                                      ; preds = %then_block11, %while_block
   %32 = load ptr, ptr %p, align 8
-  %33 = load i64, ptr @TOKEN_RBRACE.37, align 4
+  %33 = load i64, ptr @TOKEN_RBRACE.39, align 4
   %34 = call ptr @parser_accept_token(ptr %32, i64 %33)
   %35 = icmp eq ptr %34, null
   br i1 %35, label %then_block13, label %merge_block14
@@ -7390,7 +7498,7 @@ entrypoint:
   %p = alloca ptr, align 8
   store ptr %0, ptr %p, align 8
   %1 = load ptr, ptr %p, align 8
-  %2 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %2 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %typ = alloca ptr, align 8
   store ptr %3, ptr %typ, align 8
@@ -7403,7 +7511,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %6 = load ptr, ptr %p, align 8
-  %7 = load i64, ptr @TOKEN_LBRACE.36, align 4
+  %7 = load i64, ptr @TOKEN_LBRACE.38, align 4
   %8 = call ptr @parser_accept_token(ptr %6, i64 %7)
   %9 = icmp eq ptr %8, null
   br i1 %9, label %then_block1, label %merge_block2
@@ -7413,7 +7521,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %10 = load ptr, ptr %p, align 8
-  %11 = load i64, ptr @TOKEN_RBRACE.37, align 4
+  %11 = load i64, ptr @TOKEN_RBRACE.39, align 4
   %12 = call ptr @parser_accept_token(ptr %10, i64 %11)
   %13 = icmp eq ptr %12, null
   br i1 %13, label %then_block3, label %merge_block4
@@ -7504,7 +7612,7 @@ then_block8:                                      ; preds = %merge_block6
 
 merge_block9:                                     ; preds = %merge_block6
   %21 = load ptr, ptr %p, align 8
-  %22 = load i64, ptr @TOKEN_LPAREN.34, align 4
+  %22 = load i64, ptr @TOKEN_LPAREN.36, align 4
   %23 = call ptr @parser_accept_token(ptr %21, i64 %22)
   %24 = icmp ne ptr %23, null
   br i1 %24, label %then_block10, label %merge_block15
@@ -7523,7 +7631,7 @@ then_block11:                                     ; preds = %then_block10
 
 merge_block12:                                    ; preds = %then_block10
   %29 = load ptr, ptr %p, align 8
-  %30 = load i64, ptr @TOKEN_RPAREN.35, align 4
+  %30 = load i64, ptr @TOKEN_RPAREN.37, align 4
   %31 = call ptr @parser_accept_token(ptr %29, i64 %30)
   %32 = icmp eq ptr %31, null
   br i1 %32, label %then_block13, label %merge_block14
@@ -7545,14 +7653,14 @@ merge_block15:                                    ; preds = %merge_block9
   br i1 %37, label %then_block16, label %merge_block17
 
 then_block16:                                     ; preds = %merge_block15
-  call void (ptr, ...) @printf(ptr @162)
+  call void (ptr, ...) @printf(ptr @170)
   ret ptr null
 
 merge_block17:                                    ; preds = %merge_block15
   %38 = load ptr, ptr %tok, align 8
   %type = getelementptr %token.2, ptr %38, i32 0, i32 0
   %39 = load i64, ptr %type, align 4
-  %40 = load i64, ptr @TOKEN_NULL.18, align 4
+  %40 = load i64, ptr @TOKEN_NULL.20, align 4
   %41 = icmp eq i64 %39, %40
   br i1 %41, label %then_block18, label %merge_block20
 
@@ -7570,7 +7678,7 @@ merge_block20:                                    ; preds = %merge_block17
   %46 = load ptr, ptr %tok, align 8
   %type21 = getelementptr %token.2, ptr %46, i32 0, i32 0
   %47 = load i64, ptr %type21, align 4
-  %48 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %48 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %49 = icmp eq i64 %47, %48
   br i1 %49, label %then_block22, label %merge_block27
 
@@ -7606,7 +7714,7 @@ merge_block27:                                    ; preds = %merge_block20
   %62 = load ptr, ptr %tok, align 8
   %type28 = getelementptr %token.2, ptr %62, i32 0, i32 0
   %63 = load i64, ptr %type28, align 4
-  %64 = load i64, ptr @TOKEN_NUMBER.16, align 4
+  %64 = load i64, ptr @TOKEN_NUMBER.18, align 4
   %65 = icmp eq i64 %63, %64
   br i1 %65, label %then_block29, label %merge_block36
 
@@ -7640,7 +7748,7 @@ merge_block36:                                    ; preds = %merge_block27
   %78 = load ptr, ptr %tok, align 8
   %type37 = getelementptr %token.2, ptr %78, i32 0, i32 0
   %79 = load i64, ptr %type37, align 4
-  %80 = load i64, ptr @TOKEN_BOOLEAN.17, align 4
+  %80 = load i64, ptr @TOKEN_BOOLEAN.19, align 4
   %81 = icmp eq i64 %79, %80
   br i1 %81, label %then_block38, label %merge_block46
 
@@ -7674,7 +7782,7 @@ merge_block46:                                    ; preds = %merge_block36
   %94 = load ptr, ptr %tok, align 8
   %type47 = getelementptr %token.2, ptr %94, i32 0, i32 0
   %95 = load i64, ptr %type47, align 4
-  %96 = load i64, ptr @TOKEN_CHAR.19, align 4
+  %96 = load i64, ptr @TOKEN_CHAR.21, align 4
   %97 = icmp eq i64 %95, %96
   br i1 %97, label %then_block48, label %merge_block56
 
@@ -7708,7 +7816,7 @@ merge_block56:                                    ; preds = %merge_block46
   %110 = load ptr, ptr %tok, align 8
   %type57 = getelementptr %token.2, ptr %110, i32 0, i32 0
   %111 = load i64, ptr %type57, align 4
-  %112 = load i64, ptr @TOKEN_STRING.20, align 4
+  %112 = load i64, ptr @TOKEN_STRING.22, align 4
   %113 = icmp eq i64 %111, %112
   br i1 %113, label %then_block58, label %merge_block66
 
@@ -7758,7 +7866,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %5 = load ptr, ptr %p, align 8
-  %6 = load i64, ptr @TOKEN_DOT.30, align 4
+  %6 = load i64, ptr @TOKEN_DOT.32, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp eq ptr %7, null
   br i1 %8, label %then_block1, label %merge_block2
@@ -7768,7 +7876,7 @@ then_block1:                                      ; preds = %merge_block
 
 merge_block2:                                     ; preds = %merge_block
   %9 = load ptr, ptr %p, align 8
-  %10 = load i64, ptr @TOKEN_IDENTIFIER.15, align 4
+  %10 = load i64, ptr @TOKEN_IDENTIFIER.17, align 4
   %11 = call ptr @parser_accept_token(ptr %9, i64 %10)
   %ident = alloca ptr, align 8
   store ptr %11, ptr %ident, align 8
@@ -7828,7 +7936,7 @@ merge_block:                                      ; preds = %entrypoint
   %typ = alloca i64, align 8
   store i64 -1, ptr %typ, align 4
   %5 = load ptr, ptr %p, align 8
-  %6 = call ptr @parser_accept_parse(ptr %5, ptr @unnamed_func.43)
+  %6 = call ptr @parser_accept_parse(ptr %5, ptr @unnamed_func.45)
   %ex = alloca ptr, align 8
   store ptr %6, ptr %ex, align 8
   %7 = load ptr, ptr %ex, align 8
@@ -7847,7 +7955,7 @@ merge_block2:                                     ; preds = %merge_block, %then_
 
 then_block3:                                      ; preds = %merge_block2
   %12 = load ptr, ptr %p, align 8
-  %13 = call ptr @parser_accept_parse(ptr %12, ptr @unnamed_func.44)
+  %13 = call ptr @parser_accept_parse(ptr %12, ptr @unnamed_func.46)
   store ptr %13, ptr %ex, align 8
   %14 = load ptr, ptr %ex, align 8
   %15 = icmp ne ptr %14, null
@@ -7868,7 +7976,7 @@ merge_block6:                                     ; preds = %merge_block2, %merg
 
 then_block7:                                      ; preds = %merge_block6
   %19 = load ptr, ptr %p, align 8
-  %20 = call ptr @parser_accept_parse(ptr %19, ptr @unnamed_func.45)
+  %20 = call ptr @parser_accept_parse(ptr %19, ptr @unnamed_func.47)
   store ptr %20, ptr %ex, align 8
   %21 = load ptr, ptr %ex, align 8
   %22 = icmp ne ptr %21, null
@@ -7889,7 +7997,7 @@ merge_block10:                                    ; preds = %merge_block6, %merg
 
 then_block11:                                     ; preds = %merge_block10
   %26 = load ptr, ptr %p, align 8
-  %27 = call ptr @parser_accept_parse(ptr %26, ptr @unnamed_func.46)
+  %27 = call ptr @parser_accept_parse(ptr %26, ptr @unnamed_func.48)
   store ptr %27, ptr %ex, align 8
   %28 = load ptr, ptr %ex, align 8
   %29 = icmp ne ptr %28, null
@@ -7910,7 +8018,7 @@ merge_block14:                                    ; preds = %merge_block10, %mer
 
 then_block15:                                     ; preds = %merge_block14
   %33 = load ptr, ptr %p, align 8
-  %34 = load i64, ptr @TOKEN_LESS.28, align 4
+  %34 = load i64, ptr @TOKEN_LESS.30, align 4
   %35 = call ptr @parser_accept_token(ptr %33, i64 %34)
   %36 = icmp ne ptr %35, null
   br i1 %36, label %then_block16, label %merge_block17
@@ -7930,7 +8038,7 @@ merge_block18:                                    ; preds = %merge_block14, %mer
 
 then_block19:                                     ; preds = %merge_block18
   %40 = load ptr, ptr %p, align 8
-  %41 = load i64, ptr @TOKEN_GREATER.29, align 4
+  %41 = load i64, ptr @TOKEN_GREATER.31, align 4
   %42 = call ptr @parser_accept_token(ptr %40, i64 %41)
   %43 = icmp ne ptr %42, null
   br i1 %43, label %then_block20, label %merge_block21
@@ -7995,12 +8103,12 @@ merge_block26:                                    ; preds = %merge_block24
   ret ptr %64
 }
 
-define ptr @unnamed_func.43(ptr %0) {
+define ptr @unnamed_func.45(ptr %0) {
 entrypoint:
   %ip = alloca ptr, align 8
   store ptr %0, ptr %ip, align 8
   %1 = load ptr, ptr %ip, align 8
-  %2 = load i64, ptr @TOKEN_EQUALS.21, align 4
+  %2 = load i64, ptr @TOKEN_EQUALS.23, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %4 = icmp eq ptr %3, null
   br i1 %4, label %then_block, label %merge_block
@@ -8010,7 +8118,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %5 = load ptr, ptr %ip, align 8
-  %6 = load i64, ptr @TOKEN_EQUALS.21, align 4
+  %6 = load i64, ptr @TOKEN_EQUALS.23, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp eq ptr %7, null
   br i1 %8, label %then_block1, label %merge_block2
@@ -8026,12 +8134,12 @@ merge_block2:                                     ; preds = %merge_block
   ret ptr %11
 }
 
-define ptr @unnamed_func.44(ptr %0) {
+define ptr @unnamed_func.46(ptr %0) {
 entrypoint:
   %ip = alloca ptr, align 8
   store ptr %0, ptr %ip, align 8
   %1 = load ptr, ptr %ip, align 8
-  %2 = load i64, ptr @TOKEN_BANG.27, align 4
+  %2 = load i64, ptr @TOKEN_BANG.29, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %4 = icmp eq ptr %3, null
   br i1 %4, label %then_block, label %merge_block
@@ -8041,7 +8149,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %5 = load ptr, ptr %ip, align 8
-  %6 = load i64, ptr @TOKEN_EQUALS.21, align 4
+  %6 = load i64, ptr @TOKEN_EQUALS.23, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp eq ptr %7, null
   br i1 %8, label %then_block1, label %merge_block2
@@ -8057,12 +8165,12 @@ merge_block2:                                     ; preds = %merge_block
   ret ptr %11
 }
 
-define ptr @unnamed_func.45(ptr %0) {
+define ptr @unnamed_func.47(ptr %0) {
 entrypoint:
   %ip = alloca ptr, align 8
   store ptr %0, ptr %ip, align 8
   %1 = load ptr, ptr %ip, align 8
-  %2 = load i64, ptr @TOKEN_LESS.28, align 4
+  %2 = load i64, ptr @TOKEN_LESS.30, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %4 = icmp eq ptr %3, null
   br i1 %4, label %then_block, label %merge_block
@@ -8072,7 +8180,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %5 = load ptr, ptr %ip, align 8
-  %6 = load i64, ptr @TOKEN_EQUALS.21, align 4
+  %6 = load i64, ptr @TOKEN_EQUALS.23, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp eq ptr %7, null
   br i1 %8, label %then_block1, label %merge_block2
@@ -8088,12 +8196,12 @@ merge_block2:                                     ; preds = %merge_block
   ret ptr %11
 }
 
-define ptr @unnamed_func.46(ptr %0) {
+define ptr @unnamed_func.48(ptr %0) {
 entrypoint:
   %ip = alloca ptr, align 8
   store ptr %0, ptr %ip, align 8
   %1 = load ptr, ptr %ip, align 8
-  %2 = load i64, ptr @TOKEN_GREATER.29, align 4
+  %2 = load i64, ptr @TOKEN_GREATER.31, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %4 = icmp eq ptr %3, null
   br i1 %4, label %then_block, label %merge_block
@@ -8103,7 +8211,7 @@ then_block:                                       ; preds = %entrypoint
 
 merge_block:                                      ; preds = %entrypoint
   %5 = load ptr, ptr %ip, align 8
-  %6 = load i64, ptr @TOKEN_EQUALS.21, align 4
+  %6 = load i64, ptr @TOKEN_EQUALS.23, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp eq ptr %7, null
   br i1 %8, label %then_block1, label %merge_block2
@@ -8187,7 +8295,7 @@ entrypoint:
   %typ = alloca i64, align 8
   store i64 -1, ptr %typ, align 4
   %1 = load ptr, ptr %p, align 8
-  %2 = load i64, ptr @TOKEN_BANG.27, align 4
+  %2 = load i64, ptr @TOKEN_BANG.29, align 4
   %3 = call ptr @parser_accept_token(ptr %1, i64 %2)
   %4 = icmp ne ptr %3, null
   br i1 %4, label %then_block, label %merge_block
@@ -8204,7 +8312,7 @@ merge_block:                                      ; preds = %entrypoint, %then_b
 
 then_block1:                                      ; preds = %merge_block
   %8 = load ptr, ptr %p, align 8
-  %9 = load i64, ptr @TOKEN_MINUS.23, align 4
+  %9 = load i64, ptr @TOKEN_MINUS.25, align 4
   %10 = call ptr @parser_accept_token(ptr %8, i64 %9)
   %11 = icmp ne ptr %10, null
   br i1 %11, label %then_block2, label %merge_block3
@@ -8224,7 +8332,7 @@ merge_block4:                                     ; preds = %merge_block, %merge
 
 then_block5:                                      ; preds = %merge_block4
   %15 = load ptr, ptr %p, align 8
-  %16 = load i64, ptr @TOKEN_MUL.24, align 4
+  %16 = load i64, ptr @TOKEN_MUL.26, align 4
   %17 = call ptr @parser_accept_token(ptr %15, i64 %16)
   %18 = icmp ne ptr %17, null
   br i1 %18, label %then_block6, label %merge_block7
@@ -8312,7 +8420,7 @@ inner_block:                                      ; preds = %while_block
   %typ = alloca i64, align 8
   store i64 -1, ptr %typ, align 4
   %5 = load ptr, ptr %p, align 8
-  %6 = load i64, ptr @TOKEN_MUL.24, align 4
+  %6 = load i64, ptr @TOKEN_MUL.26, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp ne ptr %7, null
   br i1 %8, label %then_block1, label %merge_block2
@@ -8328,7 +8436,7 @@ then_block1:                                      ; preds = %inner_block
 
 merge_block2:                                     ; preds = %inner_block, %then_block1
   %11 = load ptr, ptr %p, align 8
-  %12 = load i64, ptr @TOKEN_DIV.25, align 4
+  %12 = load i64, ptr @TOKEN_DIV.27, align 4
   %13 = call ptr @parser_accept_token(ptr %11, i64 %12)
   %14 = icmp ne ptr %13, null
   br i1 %14, label %then_block3, label %merge_block4
@@ -8340,7 +8448,7 @@ then_block3:                                      ; preds = %merge_block2
 
 merge_block4:                                     ; preds = %merge_block2, %then_block3
   %16 = load ptr, ptr %p, align 8
-  %17 = load i64, ptr @TOKEN_MOD.26, align 4
+  %17 = load i64, ptr @TOKEN_MOD.28, align 4
   %18 = call ptr @parser_accept_token(ptr %16, i64 %17)
   %19 = icmp ne ptr %18, null
   br i1 %19, label %then_block5, label %merge_block6
@@ -8423,7 +8531,7 @@ merge_block:                                      ; preds = %entrypoint, %then_b
   %is_dereference = alloca i1, align 1
   store i1 false, ptr %is_dereference, align 1
   %5 = load ptr, ptr %p, align 8
-  %6 = load i64, ptr @TOKEN_MUL.24, align 4
+  %6 = load i64, ptr @TOKEN_MUL.26, align 4
   %7 = call ptr @parser_accept_token(ptr %5, i64 %6)
   %8 = icmp ne ptr %7, null
   br i1 %8, label %then_block1, label %merge_block2
@@ -8446,7 +8554,7 @@ then_block3:                                      ; preds = %merge_block2
 
 merge_block4:                                     ; preds = %merge_block2
   %13 = load ptr, ptr %p, align 8
-  %14 = load i64, ptr @TOKEN_EQUALS.21, align 4
+  %14 = load i64, ptr @TOKEN_EQUALS.23, align 4
   %15 = call ptr @parser_accept_token(ptr %13, i64 %14)
   %16 = icmp eq ptr %15, null
   br i1 %16, label %then_block5, label %merge_block6
@@ -8576,10 +8684,10 @@ then_block3:                                      ; preds = %merge_block2
   %29 = load ptr, ptr %buf, align 8
   %30 = load ptr, ptr %impor_filename, align 8
   %31 = getelementptr i8, ptr %30, i64 1
-  call void (ptr, ptr, ...) @sprintf(ptr %29, ptr @163, ptr %31)
+  call void (ptr, ptr, ...) @sprintf(ptr %29, ptr @171, ptr %31)
   %32 = load ptr, ptr %buf, align 8
   store ptr %32, ptr %impor_filename, align 8
-  store ptr @164, ptr %current_file, align 8
+  store ptr @172, ptr %current_file, align 8
   br label %merge_block5
 
 merge_block5:                                     ; preds = %merge_block2, %then_block3
@@ -8755,7 +8863,7 @@ outer_block:                                      ; preds = %while_block
 
 then_block:                                       ; preds = %inner_block
   %14 = load ptr, ptr %p, align 8
-  %15 = load i64, ptr @TOKEN_COMMA.32, align 4
+  %15 = load i64, ptr @TOKEN_COMMA.34, align 4
   %16 = call ptr @parser_accept_token(ptr %14, i64 %15)
   br label %merge_block
 
@@ -8799,7 +8907,7 @@ merge_block3:                                     ; preds = %merge_block
   br label %while_block
 }
 
-define ptr @unnamed_func.47(ptr %0) {
+define ptr @unnamed_func.49(ptr %0) {
 entrypoint:
   %ip = alloca ptr, align 8
   store ptr %0, ptr %ip, align 8
@@ -8823,7 +8931,7 @@ merge_block:                                      ; preds = %entrypoint
   ret ptr %8
 }
 
-define ptr @unnamed_func.48(ptr %0) {
+define ptr @unnamed_func.50(ptr %0) {
 entrypoint:
   %ip = alloca ptr, align 8
   store ptr %0, ptr %ip, align 8
@@ -9801,7 +9909,7 @@ entrypoint:
   call void @LLVMInitializeAllTargets()
   call void @LLVMInitializeAllAsmPrinters()
   call void @LLVMInitializeAllAsmParsers()
-  %1 = call ptr @LLVMModuleCreateWithName(ptr @169)
+  %1 = call ptr @LLVMModuleCreateWithName(ptr @177)
   %module = alloca ptr, align 8
   store ptr %1, ptr %module, align 8
   %2 = call ptr @LLVMGetGlobalContext()
@@ -9913,7 +10021,7 @@ then_block:                                       ; preds = %entrypoint
   store %NODE_TYPE_SIMPLE_TYPE_DATA %26, ptr %simple_type_a, align 8
   %name = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type_a, i32 0, i32 0
   %27 = load ptr, ptr %name, align 8
-  %28 = call i1 @strcmp(ptr %27, ptr @170)
+  %28 = call i1 @strcmp(ptr %27, ptr @178)
   br i1 %28, label %then_block5, label %merge_block
 
 then_block5:                                      ; preds = %then_block
@@ -9958,11 +10066,11 @@ then_block14:                                     ; preds = %merge_block11
   %43 = load ptr, ptr %a, align 8
   %type15 = getelementptr %Node, ptr %43, i32 0, i32 0
   %44 = load i64, ptr %type15, align 4
-  call void (ptr, ...) @printf(ptr @171, i64 %44)
+  call void (ptr, ...) @printf(ptr @179, i64 %44)
   %45 = load ptr, ptr %b, align 8
   %type16 = getelementptr %Node, ptr %45, i32 0, i32 0
   %46 = load i64, ptr %type16, align 4
-  call void (ptr, ...) @printf(ptr @172, i64 %46)
+  call void (ptr, ...) @printf(ptr @180, i64 %46)
   ret i1 false
 
 merge_block17:                                    ; preds = %merge_block11
@@ -10006,10 +10114,10 @@ then_block19:                                     ; preds = %merge_block17
 then_block26:                                     ; preds = %then_block19
   %name27 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type_a22, i32 0, i32 0
   %66 = load ptr, ptr %name27, align 8
-  call void (ptr, ...) @printf(ptr @173, ptr %66)
+  call void (ptr, ...) @printf(ptr @181, ptr %66)
   %name28 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type_b, i32 0, i32 0
   %67 = load ptr, ptr %name28, align 8
-  call void (ptr, ...) @printf(ptr @174, ptr %67)
+  call void (ptr, ...) @printf(ptr @182, ptr %67)
   br label %merge_block29
 
 merge_block29:                                    ; preds = %then_block19, %then_block26
@@ -10053,7 +10161,7 @@ then_block32:                                     ; preds = %merge_block30
   br i1 %87, label %then_block37, label %merge_block38
 
 then_block37:                                     ; preds = %then_block32
-  call void (ptr, ...) @printf(ptr @175)
+  call void (ptr, ...) @printf(ptr @183)
   ret i1 false
 
 merge_block38:                                    ; preds = %then_block32
@@ -10065,7 +10173,7 @@ merge_block38:                                    ; preds = %then_block32
   br i1 %90, label %then_block40, label %merge_block41
 
 then_block40:                                     ; preds = %merge_block38
-  call void (ptr, ...) @printf(ptr @176)
+  call void (ptr, ...) @printf(ptr @184)
   ret i1 false
 
 merge_block41:                                    ; preds = %merge_block38
@@ -10106,7 +10214,7 @@ outer_block:                                      ; preds = %while_block
   ret i1 true
 
 then_block44:                                     ; preds = %inner_block
-  call void (ptr, ...) @printf(ptr @177)
+  call void (ptr, ...) @printf(ptr @185)
   ret i1 false
 
 merge_block45:                                    ; preds = %inner_block
@@ -10152,7 +10260,7 @@ then_block48:                                     ; preds = %merge_block46
   br i1 %127, label %then_block55, label %merge_block56
 
 then_block55:                                     ; preds = %then_block48
-  call void (ptr, ...) @printf(ptr @178)
+  call void (ptr, ...) @printf(ptr @186)
   ret i1 false
 
 merge_block56:                                    ; preds = %then_block48
@@ -10193,7 +10301,7 @@ then_block59:                                     ; preds = %merge_block57
   br i1 %144, label %then_block64, label %merge_block65
 
 then_block64:                                     ; preds = %then_block59
-  call void (ptr, ...) @printf(ptr @179)
+  call void (ptr, ...) @printf(ptr @187)
   ret i1 false
 
 merge_block65:                                    ; preds = %then_block59
@@ -10234,7 +10342,7 @@ outer_block70:                                    ; preds = %while_block67
   ret i1 true
 
 then_block72:                                     ; preds = %inner_block69
-  call void (ptr, ...) @printf(ptr @180)
+  call void (ptr, ...) @printf(ptr @188)
   ret i1 false
 
 merge_block73:                                    ; preds = %inner_block69
@@ -10281,7 +10389,7 @@ then_block:                                       ; preds = %entrypoint
   store %NODE_TYPE_SIMPLE_TYPE_DATA %16, ptr %simple_type, align 8
   %name = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type, i32 0, i32 0
   %17 = load ptr, ptr %name, align 8
-  %18 = call i1 @strcmp(ptr %17, ptr @181)
+  %18 = call i1 @strcmp(ptr %17, ptr @189)
   br i1 %18, label %then_block3, label %merge_block
 
 then_block3:                                      ; preds = %then_block
@@ -10300,7 +10408,7 @@ then_block3:                                      ; preds = %then_block
 merge_block:                                      ; preds = %then_block
   %name4 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type, i32 0, i32 0
   %25 = load ptr, ptr %name4, align 8
-  %26 = call i1 @strcmp(ptr %25, ptr @182)
+  %26 = call i1 @strcmp(ptr %25, ptr @190)
   br i1 %26, label %then_block5, label %merge_block8
 
 then_block5:                                      ; preds = %merge_block
@@ -10319,7 +10427,7 @@ then_block5:                                      ; preds = %merge_block
 merge_block8:                                     ; preds = %merge_block
   %name9 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type, i32 0, i32 0
   %33 = load ptr, ptr %name9, align 8
-  %34 = call i1 @strcmp(ptr %33, ptr @183)
+  %34 = call i1 @strcmp(ptr %33, ptr @191)
   br i1 %34, label %then_block10, label %merge_block13
 
 then_block10:                                     ; preds = %merge_block8
@@ -10338,7 +10446,7 @@ then_block10:                                     ; preds = %merge_block8
 merge_block13:                                    ; preds = %merge_block8
   %name14 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type, i32 0, i32 0
   %41 = load ptr, ptr %name14, align 8
-  %42 = call i1 @strcmp(ptr %41, ptr @184)
+  %42 = call i1 @strcmp(ptr %41, ptr @192)
   br i1 %42, label %then_block15, label %merge_block18
 
 then_block15:                                     ; preds = %merge_block13
@@ -10357,7 +10465,7 @@ then_block15:                                     ; preds = %merge_block13
 merge_block18:                                    ; preds = %merge_block13
   %name19 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type, i32 0, i32 0
   %49 = load ptr, ptr %name19, align 8
-  %50 = call i1 @strcmp(ptr %49, ptr @185)
+  %50 = call i1 @strcmp(ptr %49, ptr @193)
   br i1 %50, label %then_block20, label %merge_block23
 
 then_block20:                                     ; preds = %merge_block18
@@ -10410,7 +10518,7 @@ then_block25:                                     ; preds = %merge_block23
 merge_block30:                                    ; preds = %merge_block23
   %name31 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type, i32 0, i32 0
   %74 = load ptr, ptr %name31, align 8
-  call void (ptr, ...) @printf(ptr @186, ptr %74)
+  call void (ptr, ...) @printf(ptr @194, ptr %74)
   call void @assert(i1 false)
   br label %merge_block32
 
@@ -10523,7 +10631,7 @@ then_block42:                                     ; preds = %inner_block
   store %NODE_TYPE_SIMPLE_TYPE_DATA %124, ptr %simple_type44, align 8
   %name45 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type44, i32 0, i32 0
   %125 = load ptr, ptr %name45, align 8
-  %126 = call i1 @strcmp(ptr %125, ptr @187)
+  %126 = call i1 @strcmp(ptr %125, ptr @195)
   br i1 %126, label %then_block46, label %merge_block47
 
 then_block46:                                     ; preds = %then_block42
@@ -10617,7 +10725,7 @@ merge_block62:                                    ; preds = %merge_block55
   %171 = load ptr, ptr %node, align 8
   %type63 = getelementptr %Node, ptr %171, i32 0, i32 0
   %172 = load i64, ptr %type63, align 4
-  call void (ptr, ...) @printf(ptr @188, i64 %172)
+  call void (ptr, ...) @printf(ptr @196, i64 %172)
   call void @assert(i1 false)
   ret ptr null
 }
@@ -10831,7 +10939,7 @@ then_block24:                                     ; preds = %merge_block22
 merge_block25:                                    ; preds = %merge_block22
   %type26 = getelementptr %Node, ptr %stmt, i32 0, i32 0
   %50 = load i64, ptr %type26, align 4
-  call void (ptr, ...) @printf(ptr @231, i64 %50)
+  call void (ptr, ...) @printf(ptr @239, i64 %50)
   call void @assert(i1 false)
   ret i64 0
 }
@@ -10891,7 +10999,7 @@ then_block:                                       ; preds = %entrypoint
 then_block4:                                      ; preds = %then_block
   %name5 = getelementptr %NODE_PRIMARY_EXPRESSION_IDENTIFIER_DATA, ptr %ident, i32 0, i32 0
   %24 = load ptr, ptr %name5, align 8
-  call void (ptr, ...) @printf(ptr @223, ptr %24)
+  call void (ptr, ...) @printf(ptr @231, ptr %24)
   call void @assert(i1 false)
   br label %merge_block
 
@@ -10900,7 +11008,7 @@ merge_block:                                      ; preds = %then_block, %then_b
   %value = getelementptr %Variable, ptr %25, i32 0, i32 0
   %26 = load ptr, ptr %value, align 8
   %27 = call i64 @LLVMGetValueKind(ptr %26)
-  %28 = load i64, ptr @168, align 4
+  %28 = load i64, ptr @176, align 4
   %29 = icmp ne i64 %27, %28
   br i1 %29, label %then_block6, label %merge_block10
 
@@ -10926,7 +11034,7 @@ then_block6:                                      ; preds = %merge_block
   %42 = load ptr, ptr %function, align 8
   %value8 = getelementptr %Variable, ptr %42, i32 0, i32 0
   %43 = load ptr, ptr %value8, align 8
-  %44 = call ptr @LLVMBuildLoad2(ptr %38, ptr %41, ptr %43, ptr @224)
+  %44 = call ptr @LLVMBuildLoad2(ptr %38, ptr %41, ptr %43, ptr @232)
   store ptr %44, ptr %value7, align 8
   %45 = load ptr, ptr %function, align 8
   %node9 = getelementptr %Variable, ptr %45, i32 0, i32 2
@@ -11064,7 +11172,7 @@ outer_block:                                      ; preds = %while_block
   %115 = load ptr, ptr %value26, align 8
   %116 = load ptr, ptr %arguments, align 8
   %117 = load i64, ptr %i, align 4
-  %118 = call ptr @LLVMBuildCall2(ptr %111, ptr %113, ptr %115, ptr %116, i64 %117, ptr @225)
+  %118 = call ptr @LLVMBuildCall2(ptr %111, ptr %113, ptr %115, ptr %116, i64 %117, ptr @233)
   %res = alloca ptr, align 8
   store ptr %118, ptr %res, align 8
   %119 = load ptr, ptr %c, align 8
@@ -11118,7 +11226,7 @@ then_block:                                       ; preds = %entrypoint
   store ptr %9, ptr %inner_type_data, align 8
   %10 = load ptr, ptr %inner_type_data, align 8
   %name1 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %10, i32 0, i32 0
-  store ptr @190, ptr %name1, align 8
+  store ptr @198, ptr %name1, align 8
   %inner_type = alloca %Node, align 8
   %type2 = getelementptr %Node, ptr %inner_type, i32 0, i32 0
   %11 = load i64, ptr @NODE_TYPE_SIMPLE_TYPE, align 4
@@ -11185,7 +11293,7 @@ then_block8:                                      ; preds = %merge_block
   store ptr %42, ptr %d, align 8
   %43 = load ptr, ptr %d, align 8
   %name13 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %43, i32 0, i32 0
-  store ptr @191, ptr %name13, align 8
+  store ptr @199, ptr %name13, align 8
   %44 = load ptr, ptr %d, align 8
   %underlying_type = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %44, i32 0, i32 1
   store ptr null, ptr %underlying_type, align 8
@@ -11232,7 +11340,7 @@ then_block17:                                     ; preds = %merge_block15
   store ptr %66, ptr %d23, align 8
   %67 = load ptr, ptr %d23, align 8
   %name24 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %67, i32 0, i32 0
-  store ptr @192, ptr %name24, align 8
+  store ptr @200, ptr %name24, align 8
   %68 = load ptr, ptr %d23, align 8
   %underlying_type25 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %68, i32 0, i32 1
   store ptr null, ptr %underlying_type25, align 8
@@ -11290,7 +11398,7 @@ then_block31:                                     ; preds = %merge_block29
   store ptr %92, ptr %d37, align 8
   %93 = load ptr, ptr %d37, align 8
   %name38 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %93, i32 0, i32 0
-  store ptr @193, ptr %name38, align 8
+  store ptr @201, ptr %name38, align 8
   %94 = load ptr, ptr %d37, align 8
   %underlying_type39 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %94, i32 0, i32 1
   store ptr null, ptr %underlying_type39, align 8
@@ -11329,7 +11437,7 @@ then_block43:                                     ; preds = %merge_block41
   %builder = getelementptr %codegen, ptr %113, i32 0, i32 2
   %114 = load ptr, ptr %builder, align 8
   %115 = load ptr, ptr %str, align 8
-  %116 = call ptr @LLVMBuildGlobalStringPtr(ptr %114, ptr %115, ptr @194)
+  %116 = call ptr @LLVMBuildGlobalStringPtr(ptr %114, ptr %115, ptr @202)
   %x = alloca ptr, align 8
   store ptr %116, ptr %x, align 8
   %117 = load ptr, ptr %c, align 8
@@ -11340,7 +11448,7 @@ then_block43:                                     ; preds = %merge_block41
   store ptr %119, ptr %inner_type_data47, align 8
   %120 = load ptr, ptr %inner_type_data47, align 8
   %name48 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %120, i32 0, i32 0
-  store ptr @195, ptr %name48, align 8
+  store ptr @203, ptr %name48, align 8
   %inner_type49 = alloca %Node, align 8
   %type50 = getelementptr %Node, ptr %inner_type49, i32 0, i32 0
   %121 = load i64, ptr @NODE_TYPE_SIMPLE_TYPE, align 4
@@ -11466,7 +11574,7 @@ merge_block72:                                    ; preds = %then_block69, %then
   %178 = load ptr, ptr %variable, align 8
   %value74 = getelementptr %Variable, ptr %178, i32 0, i32 0
   %179 = load ptr, ptr %value74, align 8
-  %180 = call ptr @LLVMBuildLoad2(ptr %175, ptr %177, ptr %179, ptr @196)
+  %180 = call ptr @LLVMBuildLoad2(ptr %175, ptr %177, ptr %179, ptr @204)
   store ptr %180, ptr %param_value, align 8
   store i1 true, ptr %done, align 1
   br label %merge_block75
@@ -11517,7 +11625,7 @@ merge_block82:                                    ; preds = %then_block78, %then
   %204 = load ptr, ptr %variable, align 8
   %value84 = getelementptr %Variable, ptr %204, i32 0, i32 0
   %205 = load ptr, ptr %value84, align 8
-  %206 = call ptr @LLVMBuildLoad2(ptr %201, ptr %203, ptr %205, ptr @197)
+  %206 = call ptr @LLVMBuildLoad2(ptr %201, ptr %203, ptr %205, ptr @205)
   store ptr %206, ptr %param_value, align 8
   store i1 true, ptr %done, align 1
   br label %merge_block85
@@ -11642,7 +11750,7 @@ then_block101:                                    ; preds = %inner_block
   store %NODE_TYPE_SIMPLE_TYPE_DATA %261, ptr %simple_type, align 8
   %name103 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type, i32 0, i32 0
   %262 = load ptr, ptr %name103, align 8
-  %263 = call i1 @strcmp(ptr %262, ptr @198)
+  %263 = call i1 @strcmp(ptr %262, ptr @206)
   br i1 %263, label %then_block104, label %merge_block105
 
 then_block104:                                    ; preds = %then_block101
@@ -11752,7 +11860,7 @@ then_block121:                                    ; preds = %merge_block120
   br i1 %312, label %then_block122, label %merge_block123
 
 then_block122:                                    ; preds = %then_block121
-  store ptr @199, ptr %n_name, align 8
+  store ptr @207, ptr %n_name, align 8
   br label %merge_block123
 
 merge_block123:                                   ; preds = %then_block121, %then_block122
@@ -11767,7 +11875,7 @@ merge_block123:                                   ; preds = %then_block121, %the
 
 merge_block124:                                   ; preds = %merge_block120, %merge_block123
   %318 = load ptr, ptr %function, align 8
-  %319 = call ptr @LLVMAppendBasicBlock(ptr %318, ptr @200)
+  %319 = call ptr @LLVMAppendBasicBlock(ptr %318, ptr @208)
   %function_entry = alloca ptr, align 8
   store ptr %319, ptr %function_entry, align 8
   %320 = load ptr, ptr %c, align 8
@@ -12180,7 +12288,7 @@ merge_block211:                                   ; preds = %merge_block208, %th
   %504 = load ptr, ptr %rhs_value, align 8
   %value214 = getelementptr %Variable, ptr %504, i32 0, i32 0
   %505 = load ptr, ptr %value214, align 8
-  %506 = call ptr @LLVMBuildICmp(ptr %500, i64 %501, ptr %503, ptr %505, ptr @201)
+  %506 = call ptr @LLVMBuildICmp(ptr %500, i64 %501, ptr %503, ptr %505, ptr @209)
   %cmp = alloca ptr, align 8
   store ptr %506, ptr %cmp, align 8
   %node_type215 = alloca %Node, align 8
@@ -12195,7 +12303,7 @@ merge_block211:                                   ; preds = %merge_block208, %th
   store ptr %510, ptr %d218, align 8
   %511 = load ptr, ptr %d218, align 8
   %name219 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %511, i32 0, i32 0
-  store ptr @202, ptr %name219, align 8
+  store ptr @210, ptr %name219, align 8
   %512 = load ptr, ptr %d218, align 8
   %underlying_type220 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %512, i32 0, i32 1
   store ptr null, ptr %underlying_type220, align 8
@@ -12268,7 +12376,7 @@ then_block224:                                    ; preds = %merge_block222
   store ptr %548, ptr %d236, align 8
   %549 = load ptr, ptr %d236, align 8
   %name237 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %549, i32 0, i32 0
-  store ptr @203, ptr %name237, align 8
+  store ptr @211, ptr %name237, align 8
   %550 = load ptr, ptr %d236, align 8
   %underlying_type238 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %550, i32 0, i32 1
   store ptr null, ptr %underlying_type238, align 8
@@ -12334,7 +12442,7 @@ then_block243:                                    ; preds = %then_block240
   %value249 = getelementptr %Variable, ptr %581, i32 0, i32 0
   %582 = load ptr, ptr %value249, align 8
   %583 = load ptr, ptr %arr, align 8
-  %584 = call ptr @LLVMBuildGEP2(ptr %578, ptr %580, ptr %582, ptr %583, i64 1, ptr @204)
+  %584 = call ptr @LLVMBuildGEP2(ptr %578, ptr %580, ptr %582, ptr %583, i64 1, ptr @212)
   store ptr %584, ptr %result, align 8
   %585 = load ptr, ptr %lhs_value228, align 8
   %node_type250 = getelementptr %Variable, ptr %585, i32 0, i32 3
@@ -12360,7 +12468,7 @@ then_block253:                                    ; preds = %merge_block251
   %595 = load ptr, ptr %rhs_value230, align 8
   %value256 = getelementptr %Variable, ptr %595, i32 0, i32 0
   %596 = load ptr, ptr %value256, align 8
-  %597 = call ptr @LLVMBuildAdd(ptr %592, ptr %594, ptr %596, ptr @205)
+  %597 = call ptr @LLVMBuildAdd(ptr %592, ptr %594, ptr %596, ptr @213)
   store ptr %597, ptr %result, align 8
   br label %merge_block257
 
@@ -12383,7 +12491,7 @@ then_block260:                                    ; preds = %merge_block258
   %604 = load ptr, ptr %rhs_value230, align 8
   %value263 = getelementptr %Variable, ptr %604, i32 0, i32 0
   %605 = load ptr, ptr %value263, align 8
-  %606 = call ptr @LLVMBuildSub(ptr %601, ptr %603, ptr %605, ptr @206)
+  %606 = call ptr @LLVMBuildSub(ptr %601, ptr %603, ptr %605, ptr @214)
   store ptr %606, ptr %result, align 8
   br label %merge_block264
 
@@ -12456,7 +12564,7 @@ then_block278:                                    ; preds = %then_block267
   %643 = load ptr, ptr %rhs_value273, align 8
   %value281 = getelementptr %Variable, ptr %643, i32 0, i32 0
   %644 = load ptr, ptr %value281, align 8
-  %645 = call ptr @LLVMBuildMul(ptr %640, ptr %642, ptr %644, ptr @207)
+  %645 = call ptr @LLVMBuildMul(ptr %640, ptr %642, ptr %644, ptr @215)
   store ptr %645, ptr %result276, align 8
   br label %merge_block282
 
@@ -12477,7 +12585,7 @@ then_block284:                                    ; preds = %merge_block282
   %653 = load ptr, ptr %rhs_value273, align 8
   %value287 = getelementptr %Variable, ptr %653, i32 0, i32 0
   %654 = load ptr, ptr %value287, align 8
-  %655 = call ptr @LLVMBuildSDiv(ptr %650, ptr %652, ptr %654, ptr @208)
+  %655 = call ptr @LLVMBuildSDiv(ptr %650, ptr %652, ptr %654, ptr @216)
   store ptr %655, ptr %result276, align 8
   br label %merge_block288
 
@@ -12498,7 +12606,7 @@ then_block290:                                    ; preds = %merge_block288
   %663 = load ptr, ptr %rhs_value273, align 8
   %value293 = getelementptr %Variable, ptr %663, i32 0, i32 0
   %664 = load ptr, ptr %value293, align 8
-  %665 = call ptr @LLVMBuildSRem(ptr %660, ptr %662, ptr %664, ptr @209)
+  %665 = call ptr @LLVMBuildSRem(ptr %660, ptr %662, ptr %664, ptr @217)
   store ptr %665, ptr %result276, align 8
   br label %merge_block294
 
@@ -12568,7 +12676,7 @@ then_block305:                                    ; preds = %then_block298
   store %NODE_TYPE_SIMPLE_TYPE_DATA %698, ptr %simple_type308, align 8
   %name309 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %simple_type308, i32 0, i32 0
   %699 = load ptr, ptr %name309, align 8
-  %700 = call i1 @strcmp(ptr %699, ptr @210)
+  %700 = call i1 @strcmp(ptr %699, ptr @218)
   call void @assert(i1 %700)
   %701 = load ptr, ptr %c, align 8
   %builder310 = getelementptr %codegen, ptr %701, i32 0, i32 2
@@ -12579,7 +12687,7 @@ then_block305:                                    ; preds = %then_block298
   %705 = load ptr, ptr %value311, align 8
   %706 = call ptr @LLVMInt1Type()
   %707 = call ptr @LLVMConstInt(ptr %706, i64 0, i64 0)
-  %708 = call ptr @LLVMBuildICmp(ptr %702, i64 %703, ptr %705, ptr %707, ptr @211)
+  %708 = call ptr @LLVMBuildICmp(ptr %702, i64 %703, ptr %705, ptr %707, ptr @219)
   store ptr %708, ptr %r, align 8
   %node_type312 = alloca %Node, align 8
   %type313 = getelementptr %Node, ptr %node_type312, i32 0, i32 0
@@ -12593,7 +12701,7 @@ then_block305:                                    ; preds = %then_block298
   store ptr %712, ptr %d315, align 8
   %713 = load ptr, ptr %d315, align 8
   %name316 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %713, i32 0, i32 0
-  store ptr @212, ptr %name316, align 8
+  store ptr @220, ptr %name316, align 8
   %714 = load ptr, ptr %d315, align 8
   %underlying_type317 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %714, i32 0, i32 1
   store ptr null, ptr %underlying_type317, align 8
@@ -12620,7 +12728,7 @@ then_block321:                                    ; preds = %merge_block319
   %724 = load ptr, ptr %k, align 8
   %value323 = getelementptr %Variable, ptr %724, i32 0, i32 0
   %725 = load ptr, ptr %value323, align 8
-  %726 = call ptr @LLVMBuildNeg(ptr %723, ptr %725, ptr @213)
+  %726 = call ptr @LLVMBuildNeg(ptr %723, ptr %725, ptr @221)
   store ptr %726, ptr %r, align 8
   %node_type324 = alloca %Node, align 8
   %type325 = getelementptr %Node, ptr %node_type324, i32 0, i32 0
@@ -12634,7 +12742,7 @@ then_block321:                                    ; preds = %merge_block319
   store ptr %730, ptr %d327, align 8
   %731 = load ptr, ptr %d327, align 8
   %name328 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %731, i32 0, i32 0
-  store ptr @214, ptr %name328, align 8
+  store ptr @222, ptr %name328, align 8
   %732 = load ptr, ptr %d327, align 8
   %underlying_type329 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %732, i32 0, i32 1
   store ptr null, ptr %underlying_type329, align 8
@@ -12688,7 +12796,7 @@ then_block333:                                    ; preds = %merge_block331
   %758 = load ptr, ptr %k, align 8
   %value340 = getelementptr %Variable, ptr %758, i32 0, i32 0
   %759 = load ptr, ptr %value340, align 8
-  %760 = call ptr @LLVMBuildLoad2(ptr %755, ptr %757, ptr %759, ptr @215)
+  %760 = call ptr @LLVMBuildLoad2(ptr %755, ptr %757, ptr %759, ptr @223)
   store ptr %760, ptr %r, align 8
   br label %merge_block341
 
@@ -12804,7 +12912,7 @@ then_block363:                                    ; preds = %merge_block361
   %814 = load ptr, ptr %c, align 8
   %expression366 = getelementptr %NODE_CAST_STATEMENT_DATA, ptr %exp365, i32 0, i32 1
   %815 = load ptr, ptr %expression366, align 8
-  %816 = call ptr @codegen_generate_expression_value(ptr %814, ptr %815, ptr @216)
+  %816 = call ptr @codegen_generate_expression_value(ptr %814, ptr %815, ptr @224)
   %val = alloca ptr, align 8
   store ptr %816, ptr %val, align 8
   %817 = load ptr, ptr %val, align 8
@@ -12881,7 +12989,7 @@ then_block377:                                    ; preds = %merge_block375
   store ptr %849, ptr %d385, align 8
   %850 = load ptr, ptr %d385, align 8
   %name386 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %850, i32 0, i32 0
-  store ptr @217, ptr %name386, align 8
+  store ptr @225, ptr %name386, align 8
   %851 = load ptr, ptr %d385, align 8
   %underlying_type387 = getelementptr %NODE_TYPE_SIMPLE_TYPE_DATA, ptr %851, i32 0, i32 1
   store ptr null, ptr %underlying_type387, align 8
@@ -13186,7 +13294,7 @@ then_block451:                                    ; preds = %merge_block449
   %989 = load ptr, ptr %x455, align 8
   %value459 = getelementptr %StructField, ptr %989, i32 0, i32 0
   %990 = load ptr, ptr %value459, align 8
-  %991 = call ptr @LLVMBuildLoad2(ptr %986, ptr %988, ptr %990, ptr @218)
+  %991 = call ptr @LLVMBuildLoad2(ptr %986, ptr %988, ptr %990, ptr @226)
   %loaded = alloca ptr, align 8
   store ptr %991, ptr %loaded, align 8
   %v460 = alloca %Variable, align 8
@@ -13214,7 +13322,7 @@ merge_block467:                                   ; preds = %merge_block449
   %999 = load ptr, ptr %expression, align 8
   %type468 = getelementptr %Node, ptr %999, i32 0, i32 0
   %1000 = load i64, ptr %type468, align 4
-  call void (ptr, ...) @printf(ptr @219, i64 %1000)
+  call void (ptr, ...) @printf(ptr @227, i64 %1000)
   call void @assert(i1 false)
   ret ptr null
 }
@@ -13270,7 +13378,7 @@ then_block3:                                      ; preds = %merge_block
   store ptr %20, ptr %xd, align 8
   %21 = load ptr, ptr %c, align 8
   %22 = load ptr, ptr %xd, align 8
-  %23 = call ptr @codegen_generate_expression_value(ptr %21, ptr %22, ptr @189)
+  %23 = call ptr @codegen_generate_expression_value(ptr %21, ptr %22, ptr @197)
   store ptr %23, ptr %ptr, align 8
   br label %merge_block5
 
@@ -13717,7 +13825,7 @@ then_block16:                                     ; preds = %merge_block14
   %79 = load ptr, ptr %ltyp, align 8
   %80 = load ptr, ptr %79, align 8
   %81 = load ptr, ptr %ptr, align 8
-  %82 = call ptr @LLVMBuildLoad2(ptr %78, ptr %80, ptr %81, ptr @220)
+  %82 = call ptr @LLVMBuildLoad2(ptr %78, ptr %80, ptr %81, ptr @228)
   store ptr %82, ptr %ptr, align 8
   br label %merge_block18
 
@@ -13932,7 +14040,7 @@ then_block55:                                     ; preds = %merge_block53
 merge_block69:                                    ; preds = %merge_block53
   %type70 = getelementptr %Node, ptr %lhs1, i32 0, i32 0
   %184 = load i64, ptr %type70, align 4
-  call void (ptr, ...) @printf(ptr @221, i64 %184)
+  call void (ptr, ...) @printf(ptr @229, i64 %184)
   call void @assert(i1 false)
   ret i64 0
 }
@@ -14042,7 +14150,7 @@ then_block5:                                      ; preds = %then_block2
   %23 = load ptr, ptr %d4, align 8
   %name6 = getelementptr %NODE_PRIMARY_EXPRESSION_IDENTIFIER_DATA, ptr %23, i32 0, i32 0
   %24 = load ptr, ptr %name6, align 8
-  call void (ptr, ...) @printf(ptr @222, ptr %24)
+  call void (ptr, ...) @printf(ptr @230, ptr %24)
   call void @assert(i1 false)
   br label %merge_block7
 
@@ -14150,7 +14258,7 @@ entrypoint:
   %11 = load ptr, ptr %c, align 8
   %current_function = getelementptr %codegen, ptr %11, i32 0, i32 7
   %12 = load ptr, ptr %current_function, align 8
-  %13 = call ptr @LLVMAppendBasicBlock(ptr %12, ptr @226)
+  %13 = call ptr @LLVMAppendBasicBlock(ptr %12, ptr @234)
   %then_block = alloca ptr, align 8
   store ptr %13, ptr %then_block, align 8
   %14 = load ptr, ptr %c, align 8
@@ -14196,7 +14304,7 @@ outer_block:                                      ; preds = %while_block
   %33 = load ptr, ptr %c, align 8
   %current_function2 = getelementptr %codegen, ptr %33, i32 0, i32 7
   %34 = load ptr, ptr %current_function2, align 8
-  %35 = call ptr @LLVMAppendBasicBlock(ptr %34, ptr @227)
+  %35 = call ptr @LLVMAppendBasicBlock(ptr %34, ptr @235)
   %merge_block = alloca ptr, align 8
   store ptr %35, ptr %merge_block, align 8
   %36 = load ptr, ptr %c, align 8
@@ -14272,7 +14380,7 @@ entrypoint:
   %2 = load ptr, ptr %c, align 8
   %current_function = getelementptr %codegen, ptr %2, i32 0, i32 7
   %3 = load ptr, ptr %current_function, align 8
-  %4 = call ptr @LLVMAppendBasicBlock(ptr %3, ptr @228)
+  %4 = call ptr @LLVMAppendBasicBlock(ptr %3, ptr @236)
   %whil_block = alloca ptr, align 8
   store ptr %4, ptr %whil_block, align 8
   %5 = load ptr, ptr %c, align 8
@@ -14298,13 +14406,13 @@ entrypoint:
   %18 = load ptr, ptr %c, align 8
   %current_function2 = getelementptr %codegen, ptr %18, i32 0, i32 7
   %19 = load ptr, ptr %current_function2, align 8
-  %20 = call ptr @LLVMAppendBasicBlock(ptr %19, ptr @229)
+  %20 = call ptr @LLVMAppendBasicBlock(ptr %19, ptr @237)
   %inner_block = alloca ptr, align 8
   store ptr %20, ptr %inner_block, align 8
   %21 = load ptr, ptr %c, align 8
   %current_function3 = getelementptr %codegen, ptr %21, i32 0, i32 7
   %22 = load ptr, ptr %current_function3, align 8
-  %23 = call ptr @LLVMAppendBasicBlock(ptr %22, ptr @230)
+  %23 = call ptr @LLVMAppendBasicBlock(ptr %22, ptr @238)
   %outer_block = alloca ptr, align 8
   store ptr %23, ptr %outer_block, align 8
   %24 = load ptr, ptr %c, align 8
@@ -14476,7 +14584,7 @@ then_block:                                       ; preds = %entrypoint
   %llvm_module1 = getelementptr %codegen, ptr %5, i32 0, i32 0
   %6 = load ptr, ptr %llvm_module1, align 8
   %7 = load ptr, ptr %message, align 8
-  %8 = call i64 @LLVMPrintModuleToFile(ptr %6, ptr @232, ptr %7)
+  %8 = call i64 @LLVMPrintModuleToFile(ptr %6, ptr @240, ptr %7)
   ret i64 0
 
 merge_block:                                      ; preds = %entrypoint
@@ -14502,7 +14610,7 @@ merge_block:                                      ; preds = %entrypoint
 then_block2:                                      ; preds = %merge_block
   %19 = load ptr, ptr %message, align 8
   %20 = load ptr, ptr %19, align 8
-  call void (ptr, ...) @printf(ptr @233, ptr %20)
+  call void (ptr, ...) @printf(ptr @241, ptr %20)
   %21 = load ptr, ptr %message, align 8
   %22 = load ptr, ptr %21, align 8
   call void @LLVMDisposeMessage(ptr %22)
@@ -14515,7 +14623,7 @@ merge_block3:                                     ; preds = %merge_block, %then_
   %26 = load i64, ptr @LLVMCodeGenLevelDefault, align 4
   %27 = load i64, ptr @LLVMRelocDefault, align 4
   %28 = load i64, ptr @LLVMCodeModelDefault, align 4
-  %29 = call ptr @LLVMCreateTargetMachine(ptr %24, ptr %25, ptr @234, ptr @235, i64 %26, i64 %27, i64 %28)
+  %29 = call ptr @LLVMCreateTargetMachine(ptr %24, ptr %25, ptr @242, ptr @243, i64 %26, i64 %27, i64 %28)
   %target_machine = alloca ptr, align 8
   store ptr %29, ptr %target_machine, align 8
   %30 = load ptr, ptr %triple, align 8
@@ -14534,7 +14642,7 @@ merge_block3:                                     ; preds = %merge_block, %then_
 then_block5:                                      ; preds = %merge_block3
   %38 = load ptr, ptr %message, align 8
   %39 = load ptr, ptr %38, align 8
-  call void (ptr, ...) @printf(ptr @236, ptr %39)
+  call void (ptr, ...) @printf(ptr @244, ptr %39)
   %40 = load ptr, ptr %message, align 8
   %41 = load ptr, ptr %40, align 8
   call void @LLVMDisposeMessage(ptr %41)
@@ -14542,7 +14650,7 @@ then_block5:                                      ; preds = %merge_block3
 
 merge_block6:                                     ; preds = %merge_block3, %then_block5
   %filename = alloca ptr, align 8
-  store ptr @237, ptr %filename, align 8
+  store ptr @245, ptr %filename, align 8
   %42 = load ptr, ptr %target_machine, align 8
   %43 = load ptr, ptr %c, align 8
   %llvm_module7 = getelementptr %codegen, ptr %43, i32 0, i32 0
@@ -14553,7 +14661,7 @@ merge_block6:                                     ; preds = %merge_block3, %then
   %48 = load ptr, ptr %target_machine, align 8
   call void @LLVMDisposeTargetMachine(ptr %48)
   %49 = load ptr, ptr %filename, align 8
-  call void (ptr, ...) @printf(ptr @238, ptr %49)
+  call void (ptr, ...) @printf(ptr @246, ptr %49)
   ret i64 0
 }
 
@@ -14580,7 +14688,7 @@ entrypoint:
   %alloc = alloca ptr, align 8
   store ptr %1, ptr %alloc, align 8
   %2 = load ptr, ptr %filename, align 8
-  %3 = call ptr @fopen(ptr %2, ptr @239)
+  %3 = call ptr @fopen(ptr %2, ptr @247)
   %file = alloca ptr, align 8
   store ptr %3, ptr %file, align 8
   %4 = load ptr, ptr %file, align 8
@@ -14631,7 +14739,7 @@ entrypoint:
   br i1 %3, label %then_block, label %merge_block
 
 then_block:                                       ; preds = %entrypoint
-  call void (ptr, ...) @printf(ptr @240)
+  call void (ptr, ...) @printf(ptr @248)
   ret i64 1
 
 merge_block:                                      ; preds = %entrypoint
@@ -14661,12 +14769,12 @@ inner_block:                                      ; preds = %while_block
   %arg = alloca ptr, align 8
   store ptr %13, ptr %arg, align 8
   %14 = load ptr, ptr %arg, align 8
-  %15 = call i1 @strcmp(ptr %14, ptr @241)
+  %15 = call i1 @strcmp(ptr %14, ptr @249)
   br i1 %15, label %then_block1, label %merge_block2
 
 outer_block:                                      ; preds = %while_block
   %16 = load ptr, ptr %filename, align 8
-  call void (ptr, ...) @printf(ptr @242, ptr %16)
+  call void (ptr, ...) @printf(ptr @250, ptr %16)
   %17 = call ptr @arena_init(i64 1073741824)
   %alloc = alloca ptr, align 8
   store ptr %17, ptr %alloc, align 8